Shell字元操作命令——grep、sed、awk

flyingfishzxf發表於2016-03-02

`##grep:用於過濾文字內容

egrep == grep -E

grep 常用選項

選項 作用
grep –color 自動使用顏色標示匹配的關鍵詞
grep -n 匹配出來的行前面顯示行號
grep -v 對匹配的內容取反,顯示未匹配行
grep -c 顯示匹配的行數
grep -r 後面加目錄,遍歷一個目錄,將目錄中檔案裡匹配的行都列印出來

sed:可以過濾、查詢和替換

sed 常用選項

選項 作用
sed -n 不列印未指定的行
sed -r 脫義,當正則裡有特殊字元需要用 \ 進行轉義時
sed -i 會把更改儲存到檔案中,實際改變檔案內容,慎用
sed -e 可以進行多次匹配,若匹配的關鍵詞在同一行會重複列印

例項:

語句 作用
sed -n '10'p 1.txt p表示列印;-n:如果不加,則會列印全部內容,並把指定的那行再列印一次
sed -n '10,20'p 1.txt 表示列印第10~20行的內容
sed -n '30,$'p 1.txt 表示列印30行到末行的內容
sed -nr '/o{2}/'p 1.txt 等價於 sed -n ‘/o\{2\}/’p 1.txt
sed '/fish/'d 1.txt 將含有fish的行刪除不顯示
sed '1,10s/login/LOGIN/g 1.txt 將1~10行中的login替換成LOGIN,語法類似於vim中的替換
sed 's/login/LOGIN/g 1.txt 全域性替換,s=1,$s
sed -r 's#(^[a-z]+)(:.\*:)(.*$)#\3\2\1#g' 1.txt 替換位置

awk:可以分段、邏輯判斷、數學運算

awk [-F fs] [-v var=value] [-f prog-file | 'program text'] [file...]

其中-F引數用於預先指定前面提到的欄位分隔符(還有其他指定欄位的方式) ,-v用於預先為awk程式指定變數,-f引數用於指定awk命令要執行的程式檔案,或者在不加-f引數的情況下直接將程式語句放在這裡,最後為awk需要處理的文字輸入,且可以同時輸入多個文字檔案。

awk 常用選項

選項 作用
awk -F ‘:’ 指定以’:’為分隔符
awk –posix 讓awk支援正則中的{}
NR 表示行數,awk內建變數
NF 表示每行段數,awk內建變數

例項:

語句 作用
awk '/keyword/' 1.txt 匹配keyword並輸出
awk -F ':' '$1~/root/' 1.txt 以:為分隔符分成若干段,用第1段匹配root並輸出
awd -F ':' 'OFS="#" /root/ 1.txt OFS用來指定輸出時每段之間的分隔符

相關文章