代码之家  ›  专栏  ›  技术社区  ›  abyss.7

如何从文件行组成自定义命令行参数?

  •  1
  • abyss.7  · 技术社区  · 13 年前

    我知道 xargs 实用程序,它允许我将行转换为多个参数,如下所示:

    echo -e "a\nb\nc\n" | xargs
    

    结果:

    a b c
    

    但我想得到:

    a:b:c
    

    角色 : 用于示例。我希望能够在两行之间插入任何分隔符来获得一个参数。我该怎么做?

    3 回复  |  直到 13 年前
        1
  •  1
  •   jfg956    13 年前

    如果您有一个包含多行的文件,而您希望更改为单个参数,将NEWLINES更改为单个字符,则 paste 命令是您所需要的:

    $ echo -en "a\nb\nc\n" | paste -s -d ":"
    a:b:c
    

    然后,您的命令变为:

    your_command "$(paste -s -d ":" your_file)"
    

    编辑:

    如果要插入多个字符作为分隔符,可以使用 sed 之前 粘贴 :

    your_command "$(sed -e '2,$s/^/<you_separator>/' your_file | paste -s -d "")"
    

    或者使用一个更复杂的 sed公司 :

    your_command "$(sed -n -e '1h;2,$H;${x;s/\n/<you_separator>/gp}' your_file)"
    
        2
  •  1
  •   fedorqui    13 年前

    你举的例子对我不起作用。你需要:

    echo -e "a\nb\nc\n" | xargs
    

    得到 a b c .

    回到您的需要,您可以这样做:

    echo "a b c" | awk 'OFS=":" {print $1, $2, $3}'
    

    它将分隔符从空格改为 : 或者你想要的任何东西。

    您也可以使用 sed :

    echo "a b c" | sed -e 's/ /:/g
    

    将输出 a:b:c .

    经过所有这些数据处理后,您可以使用 xargs 执行您想要的命令。只需 | xargs 做任何你想做的事。

    希望能有所帮助。

        3
  •  0
  •   Dipto    13 年前

    可以使用连接线 xargs 然后更换空间( ' ' )使用 sed .

    echo -e "a\nb\nc"|xargs| sed -e 's/ /:/g'

    将导致

    a:b:c

    很明显,您可以使用此输出作为其他命令的参数 参数代换 .

    echo -e "a\nb\nc"|xargs| sed -e 's/ /:/g'|xargs