2013-05-31 64 views
2

如何在sed中使用详细标志。例如。如果我使用sed命令删除一些行,那么我希望它们显示在屏幕上,无论哪一行都被删除。还让我知道这是否可以通过脚本完成?sed:选择删除的显示行

在此先感谢

+4

sed中没有详细标志 – perreal

回答

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选项)的文件。

3

这可能适合你(GNU sed);

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

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