7. xargs
xargs 命令應該緊跟在管道操作符之后。它以標準輸入作為主要的源數據流,并使用stdin并通過提供
命令行參數來執行其他命令。例如:
command | xargs
xargs可以作為一種替換方式,作用類似于find命令中的 -exec 參數。下面介紹一些借助xargs 命令能夠
實現的技巧。
一. 將多行輸入轉換成單行輸出。
只需要將換行符移除,再用“ ” (空格)進行代替,就可以實現多行輸入的轉換。
cat example.txt
1 2 3 4 5 6
7 8 9 10
11 12
則:
cat example.txt | xargs
1 2 3 4 5 6 7 8 9 10 11 12
二. 將單行輸入轉換成多行輸出
指定每行最大的參數數量n, 我們可以將任何來自stdin的文本劃分成多行,每行n個參數。每一個參數都是由“ ” (空格)隔開的字符串。空格是默認的定界符,依照下面的方法可以將單行劃分成多行:
cat example.txt | xargs -n 3
工作原理:
我們可以用自己的定界符來分隔參數。用-d選項作為輸入指定一個定制的定界符
echo "splitXsplitXsplitXsplit" | xargs -d X
默認情況下,xargs采用內部字段分隔符(IFS)作為輸入定界符。
1.讀取stdin, 將格式化參數傳遞給命令
cat args.txt
arg1
arg2
arg3
cat args.txt | xargs -n 1 ./cecho.sh
在這個例子中,我們直接為特定的命令提供命令行參數。但實際上除了他們外,我們還需要一些固定不變的參數,如:
./cecho.sh -p arg1 -l
xargs有一個選項-I,我們可以用-I指定一個替換字符串,這個字符串會在xargs擴展的時候被替換掉。
cat args.txt | xargs -I {} ./cecho.sh -p {} -l
cat args.txt | xargs -n 2 | xarg -I {} ./cecho -p {} -l
2. 結合find使用xargs
xargs 和 find 算是一對死黨。兩者結合使用可以讓任務變得更輕松。不過人們卻通常以一種錯誤的組合方式使用它們。例如:
find . -type f -name "*.txt" -print | xargs rm -f
這樣做很危險。有時可能會刪除不必要刪除的文件。我們沒法預測分隔find命令輸出結果的定界符究竟是'\n' 還是 ' '.
很多文件名中都包行有空格符,而xargs很可能會誤以為它們是定界符。
只要我們把find 的輸出作為xargs的輸入,就必須將-print0 與 find 結合使用,以字符null來分隔輸出。
find . -type f -name "*.txt" -print0 | xargs -0 rm -f
這樣就可以刪除所有的.txt文件。 xargs -0 將 \0 作為輸入定界符。
3. 統計源代碼中所有c程序文件的行數。
統計c程序文件的行數是大多數程序員都會遇到的活兒
find path -type f -name "*.c" -print0 | xargs -0 wc -l
轉載于:https://www.cnblogs.com/thorngirl/p/4202450.html
總結
- 上一篇: SolrCloud zookeeper节
- 下一篇: Excel 公式(细节若干)