1

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

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

结果是:

a b c

但我想得到:

a:b:c

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

4

3 回答 3

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做任何你想做的事。

希望能帮助到你。

于 2013-03-12T09:45:54.510 回答
1

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

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

然后,您的命令变为:

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

编辑:

如果要插入多个字符作为分隔符,可以使用sedbefore 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)"
于 2013-03-12T10:25:12.453 回答
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

于 2013-03-12T10:23:04.227 回答