将sed行分隔符更改为NUL,以充当;xargs-0“;预过滤器?
我运行的命令行如下:将sed行分隔符更改为NUL,以充当;xargs-0“;预过滤器?,sed,xargs,Sed,Xargs,我运行的命令行如下: filename_listing_command | xargs -0 action_command filename_listing_command | sed -e '/\.py/!d' | xargs ac 其中,filename\u listing\u命令使用空字节分隔文件——这就是xargs-0想要使用的内容 问题是我想过滤掉一些文件。大概是这样的: filename_listing_command | xargs -0 action_command fil
filename_listing_command | xargs -0 action_command
filename_listing_command | sed -e '/\.py/!d' | xargs ac
其中,filename\u listing\u命令
使用空字节分隔文件——这就是xargs-0
想要使用的内容
问题是我想过滤掉一些文件。大概是这样的:
filename_listing_command | xargs -0 action_command
filename_listing_command | sed -e '/\.py/!d' | xargs ac
但是我需要使用xargs-0
如何将sed想要的行分隔符从换行符更改为NUL?通过管道将其传输到
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
如果您的文件名中没有包含换行符,那么使用GNU Parallel阅读解决方案可能会更容易:
filename_listing_command | grep -v '\.py$' | parallel ac
了解有关GNU Parallel的更多信息如果您点击此按钮以寻找答案,并且正在使用GNU sed 4.2.2或更高版本,它现在有一个-z选项,可以满足OP的要求。在和的帮助下,我们有:
sed-nzE“s/^$前缀(.*)/\1/p”
您的sed
解决方案仍然会在\n
上中断,因此如果文件名包含\n
并以.py
结尾,则只有\n
之后的部分将被删除。例如,printf'%s\0'$'abc\ndef.py'| sed's/[^\x0]*\.py\x0//g'
将打印abc\n
。这违背了使用空终止符的目的。在我的情况下,我的命令(用于\n
终止符)是sed-ne的/^UU//p'
,我无法轻松地将其转换为grep
命令。@musiphil:Try:grep-PzZo'^(?@DennisWilliamson:谢谢,但它不起作用。您可以尝试以下测试用例:printf“%s\0”UU abc.py'| cmd
,将您的grep
设置为cmd
,并且abc.py\0
应为但grep
不打印任何内容(并保留退出状态1)@musiphil:对不起,把克拉放在后面看:grep-PzZo'(?