1、xargc命令:給其他命令傳遞參數的一個過濾器;組合多個命令的一個工具。
xargs命令可以通過管道接受字符串,並且將接收到的字符串通過空格分割(默認情況下時空格分割)成許多的參數,然後將參數傳遞給後面的命令,作爲後面的命令的命令行參數。
2、一個命令獲取參數一般有兩種情況:通過命令行參數或者標準輸入。
Linux中很多命令都是從命令行參數中獲取參數,然後從標準輸入中讀取,反映在程序中,
<1>命令行參數是通過main(int argc,char* argv[],char* envp[])的參數中獲得的,
<2>而標準輸入則是通過通過標準輸入函數(scanf)讀取到的,它們獲取的地方不一樣。標準輸入是有緩衝區的,
(1)、cat和管道一起使用:
當cat後面有參數時,不去標準輸入中讀:
a.txt存在時,直接讀取
當b.txt文件不存在時,cat提示文件不存在
下面這條從標準輸入中讀取
用參數-來指定去從標準輸入中讀取
直接使用cat,程序等待輸入,此時也是從標準輸入中得到的內容
只是顯示a.txt中的內容,雖然指定了-去標準輸入裏去讀,結果卻只在文件中進行了讀取。
當使用echo 'hello' | grep a.txt - 時,grep會同時處理標準輸入中的hello也會從a.txt中搜索。
cat和grep的不同就在於當指定了-選項時(既要去標準輸入中讀取時),當cat後有文件時,只會讀文件內的內容,而grep標準輸入裏的內容和文件裏的內容都會處理。
(2)、xargs和管道的使用及對比
對比
(3)、xargs的用法:
①默認情況下xargs將其標準輸入中的內容以空格(包括Tab、回車換行)分割成多個,然後當做命令行參數傳遞給其後面的命令。
②-d選項,用於指定分割符。
③-p選項,使得xargs命令不會馬上執行後面的命令,而是輸出即將要執行的完整命令(包括命令以及傳遞給命令的命令行參數)來詢問是否執行,只有輸入y才能繼續執行。
④-n選項,用於將xargs產生的命令行參數,每次傳遞n個給後面的命令執行。
⑤-E選項,指定一個字符串,當解析出很多命令行參數的時候,如果搜索到-E所指定的命令行參數時,則只會將-E指定的命令行參數之前的傳遞給後面的命令。
但是-E選項在-d選項存在時不起作用
⑥與find命令一起使用
find默認情況下輸出結果是每條記錄後面加上換行符
(4)、總結:
管道是實現將前面的標準輸出作爲後面的標準輸入!
xargs是將標準輸入作爲命令行參數!