我知道xargs
实用程序,它允许我将行转换为多个参数,如下所示:
echo -e "a\nb\nc\n" | xargs
结果:
a b c
但我想得到:
a:b:c
字符:
用于示例。我希望能够在行之间插入任何分隔符以获得单个参数。我该怎么办?
答案 0 :(得分:1)
你给的例子不适合我。你需要:
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
并做任何你想做的事。
希望它有所帮助。
答案 1 :(得分:1)
如果您的文件包含多行而不是想要更改为单个参数的单个参数,则paste
命令就是您所需要的:
$ echo -en "a\nb\nc\n" | paste -s -d ":"
a:b:c
然后,您的命令变为:
your_command "$(paste -s -d ":" your_file)"
修改强>
如果您要插入多个字符作为分隔符,可以在sed
之前使用paste
:
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 :(得分:0)
您可以使用xargs
加入这些行,然后使用' '
替换该行(sed
)。
echo -e "a\nb\nc"|xargs| sed -e 's/ /:/g'
将导致
a:b:c
显然,您可以使用此输出作为使用其他xargs
的其他命令的参数。
echo -e "a\nb\nc"|xargs| sed -e 's/ /:/g'|xargs