只要没有太多要删除的行,并且您没有在具有可悲限制版本的系统上工作sed
(曾经sed
在 HP-UX 上限制为大约 100 个命令),那么您可以使用:
sed 's/$/d/' linenum.txt | sed -f - file.txt
这使用第一个sed
将行号转换为删除命令(请注意,您的部分麻烦是一个杂散的不需要的斜杠),然后告诉第二个sed
从标准输入(-f -
)读取其脚本并将其应用于file.txt
.
以上适用于 GNU sed
;它不适sed
用于 Mac OS X 10.7.5 ( sed: -: No such file or directory
) 上的 BSD。在您的系统上使用它之前对其进行测试。
当然,如果您有足够新的版本bash
(适用于bash
4.2 但不适用于 3.2),那么您可以使用“进程替换”来解决以下限制sed
:
sed -f <(sed 's/$/d/' linenum.txt) file.txt
如果这也不起作用,您可以将第一个sed
命令的输出写入文件,然后使用该(临时)文件作为sed
脚本的名称。所以,有很多方法可以做到这一点。但是,任何超过 3 个进程(两次运行sed
和一次运行rm
)都是奢侈的。如果您只需要执行一次,这可能不是问题,但如果您必须在一分钟内执行多次,则可能会成为问题。