Linux xargs將輸出數據流轉換成命令參數


介紹

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

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

《歡迎交流討論》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM