Bri*_*ell 349
如果要删除第5行到第10行和第12行:
sed -e '5,10d;12d' file
Run Code Online (Sandbox Code Playgroud)
这会将结果打印到屏幕上.如果要将结果保存到同一文件:
sed -i.bak -e '5,10d;12d' file
Run Code Online (Sandbox Code Playgroud)
这将备份文件file.bak,并删除给定的行.
小智 44
您可以通过sed -i'33d'文件删除包含其行号的特定单行
这将删除33行号上的行并保存更新的文件.
gho*_*g74 25
和awk一样
awk 'NR!~/^(5|10|25)$/' file
Run Code Online (Sandbox Code Playgroud)
Mat*_*ery 16
$ cat foo
1
2
3
4
5
$ sed -e '2d;4d' foo
1
3
5
$
Run Code Online (Sandbox Code Playgroud)
这通常是反模式的症状.产生行号的工具很可能被替换为立即删除行的工具.例如;
grep -nh error logfile | cut -d: -f1 | deletelines logfile
Run Code Online (Sandbox Code Playgroud)
(deletelines你想象中你需要的实用程序在哪里)与之相同
grep -v error logfile
Run Code Online (Sandbox Code Playgroud)
话虽如此,如果您处于真正需要执行此任务的情况,您可以sed从行号文件生成一个简单的脚本.幽默地(但也许有点令人困惑)你可以这样做sed.
sed 's%$%d%' linenumbers
Run Code Online (Sandbox Code Playgroud)
它接受一个行号文件,每行一个,并在标准输出上产生相同的行号,并d在每个行号后附加.这是一个有效的sed脚本,我们可以将其保存到文件,或者(在某些平台上)管道到另一个sed实例:
sed 's%$%d%' linenumbers | sed -f - logfile
Run Code Online (Sandbox Code Playgroud)
在某些平台上,sed -f不理解选项参数-表示标准输入,因此您必须将脚本重定向到临时文件,并在完成后清理它,或者用/dev/stdin或者/proc/$pid/fd/1如果您的操作系统(或shell)替换单独的短划线有那个.
与往常一样,您可以-i在-f选项之前添加以sed编辑目标文件,而不是在标准输出上生成结果.在*BSDish平台(包括OSX)上,您还需要提供一个显式参数-i; 一个常见的习语就是提供一个空洞的论点; -i ''.