1. 程式人生 > >Linux四劍客find/grep/awk/sed

Linux四劍客find/grep/awk/sed

find ./ -name "*txt" -maxdepth 1 -type f -mtime -2 -exec mv {} ./bbb.txt \;

這條命令表示找當前目錄(-maxdepth 1,沒這條是遞迴找當前目錄的所有子目錄)且是檔案的(-type f)且兩天以內建立的(-mtime -2,如果是+2表示兩天前建立的,還可以-mmin以分鐘為單位),且名字是匹配*txt(linux萬用字元和regex不同,linux自帶的特殊字元

必須在""內)然後將這些檔案執行mv命令,第一個引數是{}它來自前面找到的所有檔案,第二個引數是要移動的目標位置(如果是目錄則只是移動,如果是檔案則表示同時要改名),最後的\;是find執行exec的固定格式不用管;

find是通過查詢檔名來找出檔案

 

grep 可以通過-v搜尋出匹配的行的其他行,如grep -v '^$' log.log表示搜尋出文件裡所有的非空行;還可以多次grep來序列過濾;

grep是搜尋檔案內容

 

awk 也是搜尋檔案內容,但它可以以對列進行排除顯示(grep是顯示行),如awk -F ':' '{print $1}' log.log表示將檔案中以:分割的字串拆分成N列,以下標1開始,這裡列印第一列;

 

sed讀和sad一樣,它是對輸出的內容修改後顯示,但是不會修改原始檔,如sed 's/aaa/bbb/' log.log表示顯示檔案內容之前對顯示的內容是aaa的修改為bbb進行顯示(s是替換,p表示列印,這裡不能加p否則會重複列印),這個可以用#代替/號

 

還有uniq命令如uniq -i表示對行進行忽略大小寫模式的distinct操作;

sort表示對行進行字典排序,加-u也可以同時進行uniq操作,加-r可以降序,-n表示以數值序排序(10比2前,如果是字典序則2比10前)

而如果要實現以某列為排序依據可以-t ' ' -k 2表示以空格作為列依據,然後以第二列作為排序依據進行排序;

 

如果要將管道符前面的結果作為grep搜尋的pattern則可以用 grep -oP '\[.{3}\](?=\ ip=1.1.1.1)' | xargs -r -I % /bin/grep "\[%\]" bbb.txt

一般情況下前面的搜尋結果只能作為grep的要搜尋的檔案的引數而不能是pattern,這裡通過xargs -r -I %實現了作為pattern