Bash
如何使用帶有 xargs 的 echo 或 printf 來遍歷文件中的列表?
在與,
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
over 。printf
另一種嘗試:
nicholas@gondor:~/x$ nicholas@gondor:~/x$ xargs echo 'numbers are ${}' < list.txt numbers are ${} 1 2 3 nicholas@gondor:~/x$
但不確定如何將上面的每個數字放在單獨的行上。
也可以看看:
$ 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
了 3 次,每次執行文件中都有一個單獨的行。實用程序的參數列表中的每個{}
參數都將替換為從文件中讀取的行。如果您的文件包含帶引號的字元串:
'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'