10
echo "'param 1' 'param 2'" | xargs -n2 -I@ echo [@] [@]

此命令输出:

[参数 1 参数 2] [参数 1 参数 2]

但是,我希望它输出:

[参数 1] [参数 2]

有没有办法做到这一点xargs?我计划使用它,-L1以便解决方案可以处理多行以及多个参数。

4

5 回答 5

9

对于那些通过搜索找到这个的人,接受的答案对我不起作用。

echo "'param 1' 'param 2'" | xargs -n1 | xargs -I@ echo \[@\] \[@\]

产生:

[param 1] [param 1]
[param 2] [param 2]

这不符合原始发布者给出的要求,即在多个实体中读取 xargs,将它们分开,并将它们作为单独的参数发送到单个命令(OP 中的“echo”)。Xargs 不是为此类任务而设计的!


bash 答案可以工作。

p=(`echo "param1 param2"`); echo [${p[0]}] [${p[1]}]

产生:

[param1] [param2]

但是此解决方案不适用于多条线路。


使用 bash 将成对的行作为参数发送到单个命令的正确解决方案是:

(echo 'param 1'; echo 'param 2'; echo 'param 3'; echo 'param 4') | while read line1; read line2; do echo "[$line1] [$line2]"; done

产生:

[param 1] [param 2]
[param 3] [param 4]


GNU Parallel 答案确实有效,但必须制作并安装 GNU Parallel。(Ubuntu 打包的版本不是 GNU Parallel。)

于 2013-03-02T22:57:20.110 回答
3
echo "'param 1' 'param 2'" | xargs -n1 | xargs -I@ echo \[@\] \[@\]

(在我的外壳中我需要逃生[],你的里程可能会有所不同)。

于 2011-05-23T15:11:57.370 回答
1

为什么坚持xargs?bash 可以很好地处理这个问题:

p=(`echo "param1 param2"`); echo ${p[0]} ${p[1]}
于 2011-08-29T05:21:52.600 回答
0

使用 GNU Parallel,您可以:

(echo 'param 1'; echo 'param 2') | parallel -N2 echo '\[{1}] \[{2}]'

观看介绍视频以了解更多信息:http ://www.youtube.com/watch?v=OpaiGYxkSuQ

于 2011-05-24T21:45:40.703 回答
0

正如这个答案所建议的,给定一个echo

参数 1 参数 2

参数 3 参数 4

以下管道:

... | while read line1; read line2; do echo "[$line1] [$line2]"; done

产生:

[param1] [param2]
[param3] [param4]

如果您有一个文件myFile.txt包含许多行,每行有两个参数,请使用以下基于的策略xargs,以便将参数重用为$fand $g

cat myFile.txt | xargs -n1 | while read f; read g; do echo $f $g; done
于 2013-10-21T14:54:55.317 回答