我有一个简单的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 '^@'