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