pipline管道
xargs
經(jīng)常配合find
使用丛版,find根本不支持pipline |
产捞,太不方便了乞旦。
xargs做到的是贼穆,把|
前面?zhèn)鬟^來的stdin信息,分拆成一系列的args兰粉,然后再把這些args組成參數(shù)傳給下一個(gè)命令故痊。這樣就解決了很多pipline管道做不到的事情了,因?yàn)楣艿啦荒軅鲄?shù)玖姑。
常用操作參考:
# 查找文本文件愕秫,并顯示每個(gè)文件的行樹
$ find . -name "*.txt" | xargs wc -l
# 順便再排個(gè)序
$ find . -name "*.txt" | xargs wc -l | sort
# 把參數(shù)傳給指定的命令
$ echo '--help' | xargs cat
>>> cat --help
注意:xargs不同的版本會(huì)不兼容慨菱。Mac上默認(rèn)版本非常低所以不兼容,需要更新Mac的gnu utils等戴甩。
參數(shù)分割 -d選項(xiàng)
-d 即delimiter符喝,分隔符。
xargs
既然是處理args的命令等恐,自然少不了args分割洲劣。比如"--abc,--bcd,--def",我們可以把用,
把字符串分割為三個(gè)參數(shù)课蔬,一起傳給下一個(gè)命令:
$ echo "-abc,-bcd,-def" | xargs -d "," echo
>>> echo --abc --bcd --def
命令打印 -p選項(xiàng)
-p 即print。
xargs可以把組合成功的整個(gè)命令打印出來郊尝,然后交互讓你選擇是否執(zhí)行:
$ echo "--help" | xargs -p cat
>>> cat --help ?...
參數(shù)組合 -n選項(xiàng)
xargs可以把拆分后的多個(gè)參數(shù)二跋,分組傳遞給下個(gè)命令,比如--restart always --name ubuntu
流昏,我們可以把他們用空格分開扎即,然后兩個(gè)一組傳給下個(gè)命令:
$ cat "--restart always --name ubuntu" | xargs -n 2 echo
>>> echo --restart always --name ubuntu
參數(shù)截取 -E選項(xiàng)
-E 同--eof-str 即End Of File - String.
xargs可以根據(jù)一定的條件在多個(gè)參數(shù)里面搜索,如果搜索到了這個(gè)詞况凉,就把這個(gè)詞及以后的全刪掉谚鄙,只保留其之前的。
注意:-E只有在xargs不指定-d的時(shí)候有效刁绒,如果指定了-d則不起作用闷营,而不管-d指定的是什么字符,空格也不行知市。
$ echo '11@22@33@44@55' | xargs -E '33' echo
>>> 11 22