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

时间:2013-03-12 09:34:12

标签: bash command-line

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

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

结果:

a b c

但我想得到:

a:b:c

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

3 个答案:

答案 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