3

我正在尝试用一个新行替换文件中的两行:

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

4

3 回答 3

8

有很多方法可以解释您的问题。如果您尝试替换固定位置的行,例如第 2 行和第 3 行,请执行以下操作:

sed '2d; 3s/.*/newtext/'

如果要替换匹配的行和以下行:

sed '/pattern/{ N; s/.*/newtext/; }'

要替换第二行与模式匹配的两个连续行:

sed -n '$p; N; /pattern/d; P; D'
于 2012-09-11T12:40:20.857 回答
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
于 2012-09-11T13:02:18.343 回答
1

即使这个问题应该已经在这个线程中得到回答,我也没有设法使“单行命令”解决方案起作用。

这个命令:

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
于 2012-09-11T13:03:18.520 回答