歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

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

介紹

我們可以利用管道將一個命令的“標准輸出”作為另一個命令的“標准輸入”;但是這裡的標准輸出都是數據流,但是某些命令的輸入只接收參數命令不接收數據流,那麼這種一般的方法就無法實現,這裡就需要借助xargs命令。xargs可以將數據流轉換成命令參數作為標准輸入的參數,接下來就來詳細了解xargs的用法。
[b]多行轉換[/b]
[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


[b]界定符分隔[/b]
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
[b]其它用法[/b]
當傳遞的命令存在多個參數而只需要給單獨的某個參數傳參數時,可以使用-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
本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須注明文章來源,且在文章開頭明顯處給明鏈接。
《歡迎交流討論》
Copyright © Linux教程網 All Rights Reserved