我怎样才能将 sed 表达式中所做的更改回显到控制台?

我怎样才能将 sed 表达式中所做的更改回显到控制台?

我有一个简单的 sed 表达式:

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

由于表达式修改了文件,因此很难看出哪些行被更改了。

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

类似于下面的输出是理想的:

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

答案1

这是 GNU sed 所特有的:

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

你可以用/dev/stderr它代替。

答案2

虽然不是很优雅,但即使没有 gnu sed 也可以使用。我们放弃就地修改文件,并假设没有任何行以“@”开头。

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 '^@'

相关内容