代码之家  ›  专栏  ›  技术社区  ›  bstpierre Edgar Aviles

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

  •  8
  • bstpierre Edgar Aviles  · 技术社区  · 14 年前

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

    filename_listing_command | xargs -0 action_command
    

    在哪里? filename_listing_command 使用空字节分隔文件--这是 xargs -0 想要消费。

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

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

    但我需要用 沙格斯-0 .

    如何将SED想要的换行符从newline更改为nul?

    4 回复  |  直到 6 年前
        1
  •  4
  •   Dennis Williamson    14 年前

    通过管道输送 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
  •  12
  •   Idcmp    11 年前

    如果你点击这个来寻找答案,并且使用GNUSED4.2.2或更高版本,它现在有一个-z选项,可以满足OP的要求。

        3
  •  1
  •   Ole Tange    14 年前

    如果没有任何文件名包含换行符,那么使用GNU Parallel读取解决方案可能更容易:

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

    进一步了解GNU Parallel http://www.youtube.com/watch?v=OpaiGYxkSuQ

        4
  •  0
  •   Netsu    6 年前

    在…的帮助下 Tom Hale that 答案是: sed -nzE "s/^$PREFIX(.*)/\1/p"