介紹
我們可以利用管道將一個命令的“標準輸出”作為另一個命令的“標準輸入”;但是這裡的標準輸出都是資料流,但是某些命令的輸入只接收引數命令不接收資料流,那麼這種一般的方法就無法實現,這裡就需要藉助xargs命令。xargs可以將資料流轉換成命令引數作為標準輸入的引數,接下來就來詳細瞭解xargs的用法。
多行轉換
[root@localhost test]# cat test 0 1 2 3 4 5 6 7 8 9
在當前的test的表中有0-9的兩行記錄,每個數字間以空格隔開
1.單行顯示,預設xargs會將換行符以空格替換
[root@localhost test]# cat test|xargs 0 1 2 3 4 5 6 7 8 9
2.多行顯示,使用-n number引數
number值表示每行顯示的引數的數量且number必須大於0,如果number大於引數的數量就以引數最大的數量顯示,例如每行顯示一個引數。
cat test|xargs -n 1
界定符分隔
xargs可以以單個字元作為一段文字的分界符,將文字拆分成多個部分以空格隔開,但是分解符只能是單個字元,不能是組合字元。
1.根據字元拆分
echo "111a222a333a444" |xargs -d a
2.同時還可以結合-n引數拆分成多行顯示
echo "111a222a333a444" |xargs -d a -n 2
命令傳參
接下來就可以看一下xargs怎樣將標準輸出資料流轉換成命令引數
接下來就以一個簡單的bash舉例
#!/bin/bash echo $* "end"
這個引數接收引數並返回原引數並以end作為行結尾
從上截圖可以看出xargs將標準的輸出作為引數傳遞給了bashtest
其它用法
當傳遞的命令存在多個引數而只需要給單獨的某個引數傳引數時,可以使用-I replace-str
vim bashtest
#!/bin/bash echo $1 $2 "end"
我只需要將xargs的引數傳遞給$1
cat test|xargs -n 1 |xargs -I str ./bashtest str a
注意:兩邊的replace-str的名稱必須保持一致,名稱不限。
總結
xargs的使用技巧還有很多,有興趣可以去慢慢摸索
備註: 作者:pursuer.chen 部落格:http://www.cnblogs.com/chenmh 本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結。 《歡迎交流討論》 |