我必须在shell脚本中使用sed来纠正与此类似的文本:
>ABC 25 15
>
>FILE def.exe 3
>INDEX
>
>ABC 12 40
>
>FILE abc.exe 2
>INDEX
>
>ABC 20 18
>
>FILE def.exe 5
>INDEX
>
>
每次后续行显示“FILE def.exe”时,我需要更改“DEF”的“ABC”模式。请注意,在“ABC”行和“FILE”行之间有一个必须保留的空白行。在该过程结束时,该文件必须如下所示:
>DEF 25 15
>
>FILE def.exe 3
>INDEX
>
>ABC 12 40
>
>FILE abc.exe 2
>INDEX
>
>DEF 20 18
>
>FILE def.exe 5
>INDEX
>
>
我尝试使用带有c选项的sed替换一段文本,但没有成功。如果有人有任何建议,我将不胜感激。
答案 0 :(得分:3)
sed '/^>ABC/{N;N;/FILE[ ]*def.exe/s/>ABC/>DEF/}' input
如果要修改输入文件,请将-i
选项添加到sed。
产地:
>DEF 25 15
>
>FILE def.exe 3
>INDEX
>
>ABC 12 40
>
>FILE abc.exe 2
>INDEX
>
>DEF 20 18
>
>FILE def.exe 5
>INDEX
>
>
答案 1 :(得分:0)
使用gnu awk
(由于记录选择器)
awk '/def.exe/ {sub(/>ABC/,">DEF")} {print $0 RS}' RS="INDEX" file
>DEF 25 15
>
>FILE def.exe 3
>INDEX
>
>ABC 12 40
>
>FILE abc.exe 2
>INDEX
>
>DEF 20 18
>
>FILE def.exe 5
>INDEX
>
>
INDEX