在介紹三劍客之前,先來認識一下萬用字元和正規表示式
萬用字元
正規表示式
作用:通過一些特殊字元,來表示一類字元內容
1、字元匹配
. 任意一個字元
[ ] 範圍內的任意一個字元
[^ ] 取反
字元類 [:digit:] [:alnum:] [:alpha:] [:lower:] [:upper:] [:space:] [:punct:]
2、次數匹配
* 匹配前面的字元0次到多次
? 匹配前面的字元0次到1次
+ 匹配前面的字元1次到多次
3、位置錨定
^ 錨定行首
$ 錨定行尾
\b 錨定詞首和錨定詞尾
\> 錨定詞尾
\< 錨定詞首
<\root\> 匹配root單詞
\{m\} 匹配前面的字元m次
\{m,n\} 匹配前面的字元m到n次
4、分組
\(\)
分組特性:預設清空下,linux系統下回為分組指定變數,變數表示形式\1 \2 \3
day4--文字處理三劍客awk,sed,grep
三劍客用法非常靈活強大,需要在練習中慢慢體會,遂以練習為主。
awk(報告生成器)
awk作為三劍客的老大,擅長於取列,主要用來做文字輸出格式化
awk在處理檔案時是逐行處理的
在awk中,全部行稱為$0,第一個欄位稱為$1,第二個欄位稱為$2……
NR為行號,NF表示最後一行
BEGIN表示最開始執行,END表示最末尾執行,因為這種特性,BEGIN常常用來賦值
awk [選項] [處理命令(指令碼)] [檔案]
awk -F 指定輸入檔案折分隔符 awk -v 賦值一個使用者定義變數 awk -f 從指令碼檔案中讀取awk命令
例1、輸出/etc/passwd第一行的第一個域
例2、列印出/etc/passwd的第3個域和第5個域
例3、匹配/var/log/message中,帶有erro關鍵字的相關資訊
例4、輸出/etc/passwd中檔名,行數,列數,和整行資訊
awk -F ':' '{print FILENAME, NR , NF ,$0}' /etc/passwd
例5、使用冒號分隔符,查詢最後一列
例6、使用awk輸出第一塊網路卡的ip地址
sed(流處理器)
sed作為三劍客的老二,擅長取行,替換和資料搜尋
sed [選項] [指令碼] [檔案]
sed -e 以選項中指定的指令碼來處理輸入結果 sed -f 以選項中指定的指令碼檔案來處理輸入結果 sed -n 只顯示處理後結果
sed -i 替換
例1、檢視/etc/passwd5-10行
這個p代表print列印,同理,d代表delete刪除
例2、搜尋/etc/passwd中有root關鍵字的行
例3、新建一個檔案,並刪除2到4行
grep(文字行過濾工具)
grep [option]... PATTERN [FILE]
PATTERN一般使用兩種方法,正規表示式和萬用字元
egrep = grep -E 使用擴充套件的正規表示式進行匹配
fgrep = fast grep 只使用檔案萬用字元進行匹配
grep 預設使用正規表示式進行文字匹配
grep -P使用perl語言的正規表示式引擎進行搜尋 grep -f指定檔案 grep -i 忽略大小寫 grep -v反選 grep --color=auto 語法著色 grep -c統計 grep -o輸出時僅顯示匹配內容(預設輸出的是匹配到的行) grep -n顯示行號 grep -w只匹配與整個單詞匹配的行
例1、顯示/proc/meminfo檔案中大小s開頭的行
例2、顯示/etc/passwd檔案中不以/bin/bash結尾的行
例3、顯示/etc/passwd檔案中UID最大的使用者的使用者名稱
例4、如果使用者root存在,顯示其預設的shell程式
例5、找出/etc/passwd中的兩位或三位數