将sed行分隔符更改为NUL以充当“xargs -0”预过滤器?

时间:2010-09-20 23:50:15

标签: sed xargs

我正在运行这样的命令行:

filename_listing_command | xargs -0 action_command

filename_listing_command使用空字节来分隔文件 - 这是xargs -0想要使用的内容。

问题是我想过滤掉一些文件。像这样:

filename_listing_command | sed -e '/\.py/!d' | xargs ac

但我需要使用xargs -0

如何将sed想要的行分隔符从换行符更改为NUL?

4 个答案:

答案 0 :(得分:12)

如果您正在寻找答案并使用GNU sed 4.2.2或更高版本,那么它现在有一个-z选项可以执行OP所要求的内容。

答案 1 :(得分:4)

通过grep

进行管道传输
filename_listing_command | grep -vzZ '\.py$' | filename_listing_command

-z在输入上接受空终止符,-Z在输出上产生空终止符,-v反转匹配(排除)。

修改

如果您更喜欢使用sed

,请尝试此操作
filename_listing_command | sed 's/[^\x0]*\.py\x0//g' | filename_listing_command

答案 2 :(得分:1)

如果您的文件名都不包含换行符,那么使用GNU Parallel读取解决方案可能更容易:

filename_listing_command | grep -v '\.py$' | parallel ac

了解有关GNU Parallel http://www.youtube.com/watch?v=OpaiGYxkSuQ

的更多信息

答案 3 :(得分:0)

借助Tom Halethat的答案,我们得到了: sed -nzE "s/^$PREFIX(.*)/\1/p"