我正在处理一堆日志文件,我需要在其中执行搜索和替换操作。我正在研究一个linux系统。
这是我的数据,我保存为.log文件:
[12/21/16 10:59:58:378 GMT+05:30] 000022a8 Err R profile.getId() PATADJO
[12/21/16 10:59:58:378 GMT+05:30] 000022a8 Err R profile.getId() PTASDAS
[12/21/16 10:59:58:612 GMT+05:30] 00000104 Err R profile.getId() MA2SD3ADA
[12/21/16 11:00:01:346 GMT+05:30] 000004a8 Err R profile.getId() D04S4514
[12/21/16 11:00:10:841 GMT+05:30] 00000187 Err R You have been registered successfully. Your ID is 1234567.
[12/21/16 11:00:01:346 GMT+05:30] 000004a8 Err R profile.getId() BFDS343SDF
[12/21/16 11:00:10:841 GMT+05:30] 00000187 Err R You have been registered successfully. Your ID is 1234567.
我的目标是搜索 BFDS343SDF 等字母数字字符串,只搜索 PATADJO 等字母字符串,只搜索 1234567 等数字字符串(均为ID's) )并用 Foo 替换它们。但是,它应该忽略第二列 000004a8 中的字符串(这些是线程ID)。您可以假设线程ID始终以00开头,并且ID永远不会从0开始。此外,ID的最小长度为6.
这就是我现在所拥有的:
sed -i -- 's/^(?!00)[A-Z0-9]\{6,\}/foo/g' "sample.log"
但是,当我运行命令时,它什么也没做。任何帮助表示赞赏。
由于
答案 0 :(得分:0)
在您的尝试中,移除carret ^
(行首)并将其替换为单词边界\b
使用perl:
perl -api.back -e 's/\b(?!00)[A-Z0-9]{6,}/foo/g' sample.log
原始文件另存为sample.log.back
如果您不想保存原始文件:
perl -apie 's/\b(?!00)[A-Z0-9]{6,}/foo/g' sample.log