我知道该xargs
实用程序,它允许我将行转换为多个参数,如下所示:
echo -e "a\nb\nc\n" | xargs
结果是:
a b c
但我想得到:
a:b:c
该字符:
用于示例。我希望能够在行之间插入任何分隔符以获得单个参数。我该怎么做?
我知道该xargs
实用程序,它允许我将行转换为多个参数,如下所示:
echo -e "a\nb\nc\n" | xargs
结果是:
a b c
但我想得到:
a:b:c
该字符:
用于示例。我希望能够在行之间插入任何分隔符以获得单个参数。我该怎么做?
你给出的例子对我不起作用。你需要:
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
做任何你想做的事。
希望能帮助到你。
如果您有一个包含多行的文件,而不是您想更改为单个参数,将 NEWLINES 更改为单个字符,则该paste
命令就是您所需要的:
$ echo -en "a\nb\nc\n" | paste -s -d ":"
a:b:c
然后,您的命令变为:
your_command "$(paste -s -d ":" your_file)"
编辑:
如果要插入多个字符作为分隔符,可以使用sed
before 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)"
您可以使用 加入行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