我正在运行这样的命令行:
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?
答案 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)