2011-05-23 73 views
9
echo "'param 1' 'param 2'" | xargs -n2 [email protected] echo [@] [@] 

该命令输出:可以分隔参数吗?

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

然而,我将它想输出:

[PARAM 1] [参数2]

有一种方法来用xargs做这个?我打算使用此与-L1因此该解决方案将处理多个线以及多个参数。

+0

什么你究竟想达到什么目的?你是否试图在执行一个命令之前“装饰”每个文件名参数,并且一次只处理一对文件名?我通常会为'xargs'编写一个脚本来执行这个工作 - 这比将xargs转换成它不想做的事情要痛苦得多。 – 2011-05-23 15:28:52

回答

8

对于那些从搜索中找到这个的人,我接受的答案并不适用。

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

生产:

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

不符合原来的海报有xargs的多个实体读取给出的要求,把它们分开,并将它们发送到一个命令(“回声” OP)作为单独的参数。 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并行答案确实有效,但是GNU并行mu制作和安装。(与Ubuntu打包版本不是GNU并行。)

+0

@wok,你能详细说明一下吗?如何使用xargs来生成我用bash生成的内容以及OP所需要的内容? – Sarkom 2013-11-04 03:10:16

+0

如果您想对文件的每一行应用相同的处理方法,请参阅http://stackoverflow.com/a/19497860/376454。 – Wok 2013-11-04 14:23:15

+0

我再次尝试过,并且**在Linux上的文件**,我**需要**使用'xargs',如我的答案中所示。只有你的答案,输出中没有**换行符**,只是'[参数1] [参数2] [参数3] [参数4]''。除了这些细节外,你的答案非常好。 – Wok 2013-11-04 14:58:08

4
echo "'param 1' 'param 2'" | xargs -n1 | xargs [email protected] echo \[@\] \[@\] 

(在我的壳,我需要逃避[],您的里程可能会有所不同)。

+1

我会如何区分第一个和第二个?例如,如果我想交换2个参数的顺序? – John 2013-09-27 00:35:15

1

为什么棒xargs的? bash可以处理这个问题:

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

如图this answer建议,给定的一个echo

的param1 param2的

PARAM 3 param4

下列管材:

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

生产:

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

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

cat myFile.txt | xargs -n1 | while read f; read g; do echo $f $g; done