linux下得管道命令

linux系統中管道命令得表現形式是 豎線 也就是 |

例如:

netstat -ano|grep 'CLOSW_WAIT' | awk '{print $6}' | uniq -c

命令就是將管道前得命令輸出作爲管道後得命令輸入。
但是也有很多命令是不支持管道得,那麼怎麼辦呢,比如查找完文件後,需要對每個文件做處理,理論上這裏是個for循環,沒辦法作爲管道命令一次性輸出給管道後得命令

這個時候xargs命令就是在這種場景下使得管道前得輸出可以遞歸給管道後使用以下爲參數

-a file 從文件中讀入作爲sdtin
-e flag ,注意有的時候可能會是-E,flag必須是一個以空格分隔的標誌,當xargs分析到含有flag這個標誌的時候就停止。
-p 當每次執行一個argument的時候詢問一次用戶。
-n num 後面加次數,表示命令在執行的時候一次用的argument的個數,默認是用所有的。
-t 表示先打印命令,然後再執行。
-i 或者是-I,這得看linux支持了,將xargs的每項名稱,一般是一行一行賦值給 {},可以用 {} 代替。
-r no-run-if-empty 當xargs的輸入爲空的時候則停止xargs,不用再去執行了。
-s num 命令行的最大字符數,指的是 xargs 後面那個命令的最大命令行字符數。
-L num 從標準輸入一次讀取 num 行送給 command 命令。
-l 同 -L。
-d delim 分隔符,默認的xargs分隔符是回車,argument的分隔符是空格,這裏修改的是xargs的分隔符。
-x exit的意思,主要是配合-s使用。。
-P 修改最大的進程數,默認是1,爲0時候爲as many as it can 

例如

find . -name '*.txt' |xargs -i -t grep 'SELECT' {}

以上命令就是會從find命令查找到得所有.txt文件中查找到包含select 這個字符得文本。並且查找前會先將命令打印出來
執行結果

[root@localhost es]# find . -name '*.txt'|xargs -i -t grep "SELECT" {}
grep SELECT ./a.txt 
SELECT aaa
grep SELECT ./b.txt 
grep SELECT ./c.txt
發佈了119 篇原創文章 · 獲贊 28 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章