sed:选择要删除的显示行

时间:2013-05-31 07:59:44

标签: regex sed

如何在sed中使用详细标记。例如。如果我使用sed命令删除某些行,那么我希望它们在屏幕上显示哪个行被删除。如果可以通过脚本完成此操作,请告诉我?

提前致谢

2 个答案:

答案 0 :(得分:5)

sed没有详细的标志。

但是,您可以编写一个sed脚本,将已删除的行与其他行分开。您可以稍后查看删除的行,并决定是否删除它们是个好主意。

这是一个例子。我想从test.dat中删除以数字开头的每一行。

$ cat test.dat
1 First line
2 Second line
3 Third line
A Keep this one

这是将“执行”删除的sed脚本。它查找以数字开头的行,将它们写入文件“deleted.dat”,然后从模式空间中删除它们。

$ cat code/sed/delete-verbose.sed
/^[0-9]/{
w /home/myusername/deleted.dat
d
}

这是运行时发生的情况。

$ sed -f code/sed/delete-verbose.sed test.dat
A Keep this one

以下是它写给“deleted.dat”的内容。

$ cat deleted.dat
1 First line
2 Second line
3 Third line

当您确信脚本要做正确的事情时,将输出重定向到另一个文件,或者就地编辑文件(-i选项)。

答案 1 :(得分:3)

这可能适合你(GNU sed);

sed -e '/pattern_to_delete/{w /dev/stderr' -e ';d}' input_file > output_file

没有详细标志,但通过将要删除的行发送到stderr,可以实现所需的效果。