我正在尝试用一个新行替换文件中的两行:
foo1.txt
aaa aaa
bbb bbb
ccc ccc
ddd ddd
bbb bbb
ddd ddd
替换后的文件应该如下所示
foo1.txt
aaa aaa
eee eee
ddd ddd
bbb bbb
ddd ddd
有没有办法使用sed或其他命令在文件夹的所有文件中替换
我一直在尝试使用sed但没有取得任何成功:sed 's/bbb\tbbb\nccc\tccc/eee\teee/g' foo*.txt
答案 0 :(得分:8)
有很多方法可以解释您的问题。如果您尝试更换固定位置的线,例如第2行和第3行,请执行:
sed '2d; 3s/.*/newtext/'
如果要替换匹配的行和以下行:
sed '/pattern/{ N; s/.*/newtext/; }'
要替换第二行与模式匹配的两个连续行:
sed -n '$p; N; /pattern/d; P; D'
答案 1 :(得分:1)
nawk '{if($0~/bbb.*bbb/){getline;getline;print "newline"};print}' your_file
测试如下:
> cat temp
aaa aaa
bbb bbb
ccc ccc
ddd ddd
> nawk '{if($0~/bbb.*bbb/){getline;getline;print "newline"};print}' temp
aaa aaa
newline
ddd ddd
答案 2 :(得分:1)
即使这个问题已经回答in this thread,我也无法使“一线一命令”的解决方案有效。
此命令:
perl -pe 's/START.*STOP/replace_string/g' file_to_change
似乎对我不起作用,并且不执行多行替换。我不得不将它拆分为两个不同的perl脚本,如下所示:
perl -pe 's/bbb\tbbb\n.*/placeholderstring/g' foo1.txt | perl -pe 's/placeholderstring ccc\tccc/eee\teee/g'
试着看看什么最适合你。
编辑:
使用新的示例文本,唯一有效的解决方案是William Pursell
sed '/bbb\tbbb/{ N; s/.*ccc\tccc/ eee\teee/; }' foo1.txt