shell中的文字處理(grep,sed,awk命令)
阿新 • • 發佈:2019-02-20
- grep 文字過濾命令
- sed 行編輯器
- awk 報告生成器
一、grep命令
- 全面搜尋研究正則表示式並顯示出來grep 命令是一種強大的文字搜尋工具 , 根據使用者指定的“模式”對目標文字進行匹配檢查 , 列印匹配到的行
- 由正則表示式或者字元及基本文字字元所編寫的過濾條件
grep 匹配條件 處理檔案
-a 不要忽略二進位制資料。 -d<進行動作> 當指定要查詢的是目錄而非檔案時,必須使用這項引數,否則grep命令將回報資訊並停止動作。 -E 將範本樣式為延伸的普通表示法來使用,意味著使用能使用擴充套件正則表示式。 -i 忽略字元大小寫的差別。 -n在顯示符合範本樣式的那一列之前,標示出該列的編號。 -s 不顯示錯誤資訊。 -v 反轉查詢。
^ 匹配字串開始
$ 匹配字串結尾
例如:
grep root passwd #匹配root關鍵字grep ^root passwd #匹配開始字串為root
grep root$ passwd #匹配字串結尾為root
grep -i root passwd #忽略大小寫匹配root
grep -E "root|ROOT" passwd #擴充套件正則表示式,匹配root或ROOT
grep 中字元的匹配次數設定
*字元出現 [0- 任意次 ]
\?字元出現 [0-1 次 ]
\+字元出現 [1- 任意次 ]
\{n\}字元出現 [n 次 ]
\{m,n\} 字元出現 [ 最少出現 m 次,最多出現 n 次 ]
\{0,n\}字元出現 [0-n 次 ]
\{m,\}字元出現 [ 至少 m 次 ]
\(xy\)\{n\}xy 關鍵字出現 [n 次 ]
- 加上-E後可以省略轉意\字元
sed 行編輯器
用來操作純 ASCII 碼的文字
處理時 , 把當 前處理的行儲存在臨時緩衝區中 , 稱為“模式空間” (pattern space) 可以指定僅僅處理哪些行sed 符合模式條件的處理 不符合條件的不予處理,處理完成之後把緩衝區的內容送往螢幕接著處理下一行 , 這樣不斷重複 , 直到檔案末尾
呼叫 sed 命令有兩種形式:
- sed [options] 'command' file(s)
- sed [options] -f scriptfile file(s)
在檔案sedfile中寫上匹配字元
sed 對字元的處理
p 顯示d 刪除
a 新增
c 替換
w 寫入
i 插入
- p 模式操作
- d 模式操作
- w 模式操作
- 把以UUID開始的行儲存到/mnt/sedfile
- 第六行寫上/mnt/sed的內容
- 2-4行寫到檔案/mnt/sedfile中
其他用法
= #加上行號- G #新增空行
awk 報告生成器
awk 處理機制 :awk 會逐行處理文字 , 支援在處理第一行之前做一些準備工作 , 以及在處理完最後一行做一些總結性質的工作 , 在命令格式
上分別體現如下 :
BEGIN{}: 讀入第一行文字之前執行 , 一般用來初始化操作
{}: 逐行處理 , 逐行讀入文字執行相應的處理 , 是最常見的編輯指令快
END{}: 處理完最後一行文字之後執行 , 一般用來輸出處理結果
awk 的基本用法
awk '{print 第 "NR" 行 , 有 "NF" 列 }
awk 'BEGIN{a=0}{a++}END{print a}' passwd
awk -F : '/^ro/{print}' /etc/passwd
awk -F : '/^[a-d]/{print $1,$6}' passwd
awk -F : '$6~/bin$/{print $1,$6}' passwd
awk -F : '$7!~/nologin$/{print $1,$7}' passwd