I'm running a command line like this:
filename_listing_command | xargs -0 action_command
Where filename_listing_command
uses null bytes to separate the files -- this is what xargs -0
wants to consume.
Problem is that I want to filter out some of the files. Something like this:
filename_listing_command | sed -e '/\.py/!d' | xargs ac
but I need to use xargs -0
.
How do I change the line separator that sed wants from newline to NUL?
If you've hit this SO looking for an answer and are using GNU sed 4.2.2 or later, it now has a -z option which does what the OP is asking for.
Pipe it through grep
:
filename_listing_command | grep -vzZ '\.py$' | filename_listing_command
The -z
accepts null terminators on input and the -Z
produces null terminators on output and the -v
inverts the match (excludes).
Edit:
Try this if you prefer to use sed
:
filename_listing_command | sed 's/[^\x0]*\.py\x0//g' | filename_listing_command
If none of your file names contain newline, then it may be easier to read a solution using GNU Parallel:
filename_listing_command | grep -v '\.py$' | parallel ac
Learn more about GNU Parallel http://www.youtube.com/watch?v=OpaiGYxkSuQ
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With