管道命令可以將stdout重定向到stdin,但是對於只能接受命令行引數的形式接收資料的命令,無法通過stdin接收資料。此時就需要將stdin轉換為後續命令的命令列引數。xargs就是實現這個功能的命令:擅長將stdin的資料轉換為命令列引數,也可以將單行或多行文字輸入轉換為其他格式。
一般編寫shell命令都追求單行命令,使用管道符進行連線,如果後續命令需要以命令列引數接收資料,那麼xargs就是構建單行命令的重要元件之一。
xargs需要緊跟在管道符之後,以stdin作為輸入資料來源。將接收到的資料重新格式化,然後傳給後續需要命令列引數的命令。
xargs預設的定界符是空格,每乙個引數是由這個定界符分割的。預設xargs可以將換行符去除並用空格分割當做多個引數。
user@ubuntu
:~$ echo -e "a b c\nd e"
a b c
d euser@ubuntu
:~$ echo -e "a b c\nd e" | xargs
a b c d e
xargs的-n選項可以指定每行的引數個數的最大數目。
user@ubuntu
:~$ echo -e "a b c d e" | xargs -n 2
a bc d
e
-d選項可以用來指定自定義的定界符來分割stdin的輸入資料。
user@ubuntu
:~$ echo -e "axbxcxdxe" | xargs -d x tr [:lower
:] [:upper:]a
bcde
使用-i選項可以指定乙個替換字串,然後在命令列引數中用這個替換字串來代替引數。
user@ubuntu:~$ echo -e
"axbxcxdxe"
| xargs -d x -i {} command-cmd {}
-0引數可以指定\0作為定界符,可以避免很多問題。
user@ubuntu:~$ find .
-type f -name
"*.bak"
-print0
| xargs -
0 rm -f
user@ubuntu:~$ find /src -type f -name
"*.py"
-print0
| xargs -
0 wc -l
Linux命令備忘例項(1) 終端輸出
終端是使用者與shell環境進行互動的視窗,所有命令的互動結果大部分都是從終端直接顯示給使用者,因此這部分是友好顯示結果的基礎。echo是基本的終端輸出命令,直接將傳入的引數輸入,命令格式如下 echo options tobeoutput預設情況下會在每次呼叫之後新增乙個換行符。使用 n選項可以消...
linux 命令 備忘
排除某個資料夾 具體應該是 prune這個引數 比如你想找某個dll檔案,但不想找.dirname這個資料夾應該這麼寫 find path dirname prune o name dll print r 遞迴,e 正則 l 只顯示檔名 grep 排除某個目錄 exclude dir grep 顯示...
linux命令備忘
命令大全網 分割槽 mount umount fdisk 虛擬機器擴容 dd命令 dd 0.檢視ubuntu的版本 sudo lsb release a 0.查詢 find find 的 name引數的準確名字,如果想找名字相關的可以用萬用字元,如lib 查詢目錄下的所有檔案中是否含有某個字串 fi...