14

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

filename_listing_command | xargs -0 action_command

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

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

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

但我需要使用xargs -0.

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

4

4 回答 4

20

如果您点击这个 SO 寻找答案并使用 GNU sed 4.2.2 或更高版本,它现在有一个 -z 选项,可以满足 OP 的要求。

于 2014-04-16T17:03:09.013 回答
7

通过管道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
于 2010-09-21T01:39:13.467 回答
1

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

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

了解更多关于 GNU 并行http://www.youtube.com/watch?v=OpaiGYxkSuQ

于 2010-09-25T18:58:16.213 回答
0

在汤姆黑尔的帮助下,我们得到 了答案: sed -nzE "s/^$PREFIX(.*)/\1/p"

于 2018-09-21T14:01:36.653 回答