xargs:
該xargs出場了,它擅長將標準輸入資料轉換成命令列引數。 xargs能夠處理stdin並將其轉換為特定命令的命令列引數。xargs也可以將單行或者多行文字輸入轉換為其他格式,例如單行變多行,多行變單行。
例1:將多行輸入轉換成單行輸出。
將單行輸入轉換成多行輸出。
指定每行最大的引數數量n,我們可以將任何來自stdin的文字劃分成多行,每行n個引數。每一行引數都是由" "隔開的字串。空格是預設的定界符。下面的方法可以將單行劃分成多行:
來看看 xargs的其他用法:
(1):可以用自己的定界符來分割引數。用-d 選項為輸入指定乙個定製的定界符:
在上面的**中,stdin是乙個包含了多個x字元的字串。我們可以用-d 將x作為輸入定界符。在這裡,我們明確指定x作為輸入定界符,而在預設情況下 , xargs預設採用內部字段分割(空格) 作為定界符。
再結合-n選項,我們可以將輸入劃分成多行,而每行包含2個引數:
(2):將格式化或者自定義的引數傳遞給指令碼:
首先寫乙個簡單的指令碼 cecho.sh,它的作用是將命令列引數列印出來,並以#字元列印出來作為結尾,指令碼如下:
#!/bin/bash
echo $* '#'
我們嘗試執行它:
正是我們預期的結果。假如 有乙個包含著引數列表的檔案args.txt(每行乙個引數)。我們需要用兩種將這些引數傳遞給乙個命令(cecho.sh)。第一種方法,需要每次提供乙個引數:
./ cecho.sh args1
./ cecho.sh args2
./ cecho.sh args3
或者,每次需要提供兩個或三個引數。提供三個引數是,它看起來像這樣:
./ cecho.sh arg1 arg2
./ cecho.sh arg3
第二種方法,需要一次性提供所有的命令引數:
./cecho.sh arg1 arg2 arg3
上面的問題也可以用xargs來解決,我們有乙個名為args.txt的引數列表檔案,這個檔案內容如下:
就第乙個問題,我們可以將這個命令執行多次,每次使用乙個引數:
每次執行需要x個引數的命令時,使用:
input |xargs -n x
例如:
就第二個問題,為了在執行命令是一次性提供所有的引數,可以使用:
(3):結合find 使用 xargs
例1:用find匹配並列出所有".txt"檔案,然後用xargs將這些檔案刪除:
$ find . -type f -name "*.txt" -print0 | xargs -0 rm -f
這樣就可以刪除所有.txt檔案。xargs -0將 \0作為輸入定界符。
例2:
統計所有c程式檔案的行數,是大多數程式設計師都會遇到的任務,完成這項任務的**:
$ find source_code_dir_path -type f -name "*.c" -print0 |xargs -0 wc -l
先到這。下一次學習命令tr的詳細操作。。 Linux Shell指令碼攻略(三)
一.find命令 1.根據檔名或正規表示式匹配搜尋 2.基於目錄深度的搜尋 maxdepth mindepth 3.根據檔案型別搜尋 4.根據檔案時間搜尋 atime 訪問時間 mtime 修改時間 ctime 變化時間 eg find type f atime 7 print 最近7天訪問的檔案 ...
linux shell指令碼攻略 一
變數數 算 重定向陣列 別名終端資訊 日期相關 除錯指令碼 函式和引數 管道命令 字段分隔符和迭代器 迴圈算術比較 檔案系統相關測試 字串比較 日期內容 格式星期 a 例如 sat a 例如 saturday 月 b 例如nov b 例如 november 日 d 例如31 固定格式日期 d 例如 ...
Linux shell 指令碼學習攻略9
1 建立不可修改的檔案 chattr 能夠將檔案設定為不可修改。不過chattr能做的可不止這些。a 使用下列命令將乙個檔案設定為不可修改 b 這樣檔案file就變成為了不可修改狀態。來試試下面的命令 c 如果需要是檔案恢復可寫狀態,移除不可修改屬性即可 2 批量生成空白檔案 touch 命可以用來...