詳解linux,macos下批處理精要 grep,sed,find,正則,管道等結合使用例子
建立一個文字
echo "b2">text2.txt
講解
1,echo 列印
2,“b2”字串
3,>text2.txt 定向到text2.txt這個檔案裡面,如果這個檔案不存在則生成。
替換包含有某個欄位的所有檔案中得所有欄位
先安裝一下brew為了使用正規的linux命令:安裝方法:http://brew.sh/index_zh-cn.html
在終端鍵入:
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
安裝完成後:
例如:我要把/test下所有包含abc的檔案中的abc替換為def,執行命令:
gsed -i "s/abc/def/g" `grep abc -rl /test`
全域性替換檔案中的字串
find . -name "*.txt" -exec sed -i 's/[0-9]/replace/g' {} \;
1,find 遞迴查詢命令
2,. 為當前目錄下
3,-name 以名字匹配方式查詢
4,"*.txt"匹配方式所有以.txt結尾的檔案“*”表示匹配任意多次的任意非特殊符號的字元
5,-exec 把匹配結果轉給下一組命令作為引數
6,sed -i 可以在多個檔案中替換檔案裡面的指定內容編輯方式
7,'s/[0-9]/replace/g' 為匹配的內容,裡面的引數依次是‘s替換/[0-9](匹配0-9中任意一個數字)要匹配的字串/要替換的字串/g全域性替換(預設只替換第一個碰到的被匹配的字串)’
特例:mac os下sed多一個引數。原因是必須要備份一下原檔案,建立存檔到"recordTxt"
批量刪除查詢到的檔案
find . -name "txt[0-9].*" -exec rm -f {} \;grep 萬用字元查詢檔案和內容
grep 'text[0-9]' *.txt
1,*.txt 以.txt結尾的所有檔案
2,匹配以.txt結尾的所有檔案 中的text[0-9]的相關的所有內容,然後列印到螢幕上。
find查詢的內容顯示在grep上
find . -name "text[0-9].txt" -exec grep "[0-9]" {} \;
用find 找到的所有檔案, 用grep匹配出所有檔案中想要獲取的字串,並且列印到螢幕上
grep正則表示式查詢“當前目錄”下的所有“子檔案”。並且用-e來做正則篩選,結果打印出來
ls | grep -e '.\{4\}[0-9].txt'
或者定製路徑下所有自檔案的內容匹配
cd /usr/local/projects/ && ls | grep -e '.\{4\}[0-9].txt'
刪除當前資料夾下(無遞迴)匹配到的檔案
ls | grep -e'.\{4,10\}.txt' | xargs -I [] -n 1 sudo rm []1,ls 得到當前目錄下的所有自檔名字
2,| 結果通過管道把ls獲取到的內容 傳給grep作為引數
3,grep -e 用正則表示式匹配傳來內容(字串)
4 |xargs -I [] 把grep匹配到的結果作為引數,儲存在[]這個變數裡
5,-n引數的個數,這邊為n個
6,sudo rm[]給予許可權,然後rm刪除所有匹配到的檔案。
移動當前資料夾下(無遞迴)匹配好的檔案到shell資料夾下
ls | grep -e'.\{4,10\}.txt' | xargs -I [] -n 1 sudo cp [] shell/
遞迴拷貝一個檔案下的所有子檔案,到另外一個資料夾
cp -r dir1/. dir2
遞迴
刪除當前資料夾下保函某個欄位的所有檔案 find . -name .git\* | xargs rm -fr注意 *之前要新增一下轉意符才可以