在文件中与bash的一个新行替换两行(Replace two lines in a file wit

2019-09-22 07:58发布

我想在一个新行一个文件来替换两行:

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

Answer 1:

即使这个问题应该已经回答了这一主题 ,我没能做出“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'

试试,看看有什么最适合你。

编辑:

随着新的样本文本,唯一可行的解决方案是一个由威廉Pursell

sed '/bbb\tbbb/{ N; s/.*ccc\tccc/  eee\teee/; }' foo1.txt


Answer 2:

有很多的方法来解释你的问题。 如果你想在一个固定的位置,以取代线,如线2和3,这样做:

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

如果您想更换匹配的线和下面的一行:

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

要替换在该第二行的图案相匹配的连续两行:

sed -n '$p; N; /pattern/d; P; D'


Answer 3:

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


文章来源: Replace two lines in a file with one new line with bash
标签: bash replace