在闲逛与xargs
,如下所示:
nicholas@gondor:~/x$
nicholas@gondor:~/x$ xargs echo < list.txt
1 2 3
nicholas@gondor:~/x$
nicholas@gondor:~/x$ cat list.txt
1
2
3
nicholas@gondor:~/x$
如何xargs
给出如下输出:
number is 1
number is 2
number is 3
而不仅仅是当前结果的数字?
我尝试使用$
带有 echo 的符号,但没有得到正确的输出。
还尝试过:
nicholas@gondor:~/x$
nicholas@gondor:~/x$ printf '%s\n' "${list.txt[@]}" | xargs
bash: ${list.txt[@]}: bad substitution
nicholas@gondor:~/x$
但这显然没有正确读取文件。
宁愿使用echo
overprintf
除非太尴尬。
另一种尝试:
nicholas@gondor:~/x$
nicholas@gondor:~/x$ xargs echo 'numbers are ${}' < list.txt
numbers are ${} 1 2 3
nicholas@gondor:~/x$
但不确定如何将上面的每个数字放在单独的行上。
也可以看看:
答案1
$ xargs printf 'Number is %d\n' <file
Number is 1
Number is 2
Number is 3
这会从文件中读取单词,并一次使用尽可能多的单词调用给定的实用程序。该printf
实用程序将为每组参数重用其格式字符串。
以上将最终执行
printf 'Number is %d\n' 1 2 3
如果文件中的行中有空格或制表符:
$ cat file
1 2
3 4
5 6
$ xargs printf 'Number is %s\n' <file
Number is 1
Number is 2
Number is 3
Number is 4
Number is 5
Number is 6
上面是使用文件中每个空格分隔的单词运行该实用程序的结果printf
,即
printf 'Number is %s\n' 1 2 3 4 5 6
$ xargs -I {} printf 'Number is %s\n' {} <file
Number is 1 2
Number is 3 4
Number is 5 6
上面的代码运行了printf
三次,每次都与您的文件分开一行。实用程序参数列表中的每个参数都{}
将替换为从文件中读取的行。
如果您的文件包含带引号的字符串:
'1 2'
'3 4'
'5 6'
然后:
$ xargs printf 'Number is %s\n' <file
Number is 1 2
Number is 3 4
Number is 5 6
上面是运行等价的结果
printf 'Number is %s\n' '1 2' '3 4' '5 6'