Linux xargs將輸出資料流轉換成命令引數

pursuer.chen發表於2016-05-16

介紹

我們可以利用管道將一個命令的“標準輸出”作為另一個命令的“標準輸入”;但是這裡的標準輸出都是資料流,但是某些命令的輸入只接收引數命令不接收資料流,那麼這種一般的方法就無法實現,這裡就需要藉助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

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結。

《歡迎交流討論》

相關文章