我如何将sedexpression式中所做的更改回显到控制台?

我有一个简单的sedexpression式:

sed -i 's/foo/bar/g' blat.xml 

因为expression式修改了文件,所以很难看到哪些行被改变。

有没有办法将修改后的行回显到控制台?

类似于以下输出的内容将是理想的:

 sed -n 's/foo/bar/gp' blat.xml 

这是特定于GNU sed:

 sed -i 's/foo/bar/gw /dev/stdout' blat.xml 

你可以使用/dev/stderr来代替。

不优雅,但没有牛磺酸可用。 我们放弃了就地修改文件,并假定没有任何行以“@”开头。

 sed 's/foo/bar\n@bar/' infile | tee outfile.tmp | grep '^@' grep -v '^@' outfile.tmp > outfile 

你可以用bash来完成所有的工作,也可以用其他的shell来完成:

 sed 's/foo/bar\n@bar/' infile | tee >(grep -v '^@' >outfile) | grep '^@'