一、什么是正則表達式
字符是計算機軟件處理文字時最基本的單位,可能是字母,數字,標點符號,空格,換行符,漢字等等。字符串是0個或更多個字符的序列。文本也就是文字,字符串。說某個字符串匹配某個正則表達式,通常是指這個字符串里有一部分(或幾部分分別)能滿足表達式給出的條件。
在編寫處理字符串的程序或網頁時,經常會有查找符合某些復雜規則的字符串的需要。正則表達式就是用於描述這些規則的工具。換句話說,正則表達式就是記錄文本規則的代碼。
二、正則表達式的三種文本處理工具、命令。
I.grep
1.gerp的常用參數
-n 只顯示行號
-o 只顯示匹配的內容
-q 靜默模式,沒有輸出,需要使用$?來判斷有沒有過濾到自己想要的東西
-l 如果匹配成功,則輸出文件名稱,如果失敗則不輸出,通常會-rl一起連用
-A 如果匹配成功,會將匹配到的內容和后N行一起輸出
-B 如果匹配成功,會將匹配到的內容和前N行一起輸出
-C 如果匹配成功,會將匹配到的內容和前后N行一起輸出
-c 如果匹配成功,會將匹配內容的行數輸出
-E grep的擴張,相當於egrep
-i 忽略大小寫
-v 取反,不匹配
-w 匹配單詞
2.正則介紹
^ 行首
$ 行尾
. 除了換行符以外的單個字符
* 前導字符的零個或多個
.* 所有字符
[] 字符組內的任一字符
[^] 對字符組內的每個字符取反(不匹配字符組內的每個字符)
^[^] 非字符組內的字符開頭行
[a-z] 小寫字母
[A-Z] 大寫字母
[a-z] 小寫和大寫字母
[0-9] 數字
擴展正則 sed 加 -r 參數 或轉義
grep 加 -E 或 egrep 或轉義
AWK 直接支持 但不包含{n,m}
? 前導字符零個或一個
+ 前導字符一個或多個
x{m} x出現m次
x{m,} x出現m至多次
x{m,n} x出現m至n次
II.sed
流編輯器 stream editer,是以行為單位的處理程序。
sed是一個很好的文件處理工具,本身是一個管道命令,主要是以行為單位進行處理,可以將數據行進行替換、刪除、新增、選取等特定工作。
1.命令格式
sed [-nefri] ‘command’ 輸入文本
2.常用選項
-n∶使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN的資料一般都會被列出到螢幕上。但如果加上 -n 參數后,則只有經過sed 特殊處理的那一行(或者動作)才 會被列出來。
-e∶直接在指令列模式上進行 sed 的動作編輯;
-f∶直接將 sed 的動作寫在一個檔案內, -f filename 則可以執行 filename 內的sed 動作;
-r∶sed 的動作支援的是延伸型正規表示法的語法。(預設是基礎正規表示法語法)
-i∶直接修改讀取的檔案內容,而不是由螢幕輸出。
3.常用命令
a 新增, a 的后面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
c 取代, c 的后面可以接字串,這些字串可以取代 n1,n2 之間的行!
d 刪除,因為是刪除啊,所以 d 后面通常不接任何咚咚;
i 插入, i 的后面可以接字串,而這些字串會在新的一行出現(目前的上一行);
p 列印,亦即將某個選擇的資料印出。通常 p 會與參數 sed -n 一起運作~
s 取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配正規表示法!例如 1,20s/old/new/g 就是啦
III.awk
awk是行處理器,依次對每一行進行處理,然后輸出
1.命令格式
awk [options] 'commands' files
2.常用選項
-F 定義字段的分割符,默認的分隔符是連續的空格或制符表
-v 定義變量並賦值 也可以借用次方式從shell變量中引入
2.特殊要點
$0 表示整個當前行
$1 每行第一個字段
NF 字段數量變量
NR 每行的記錄號,多文件記錄遞增
FNR 與NR類似,不過多文件記錄不遞增,每個文件都從1開始
\t 制表符
\n 換行符
FS BEGIN時定義分隔符
RS 輸入的記錄分隔符,默認為換行符(即文本是按一行一行輸入)
~ 匹配,與==相比不是精確比較
!~ 不匹配,不精確比較
== 等於,必須全部相等,精確比較
!= 不等於,精確比較
&& 邏輯與
+ 匹配時表示1個或者1個以上
/[0-9][0-9]+/ 兩個或兩個以上數字
/[0-9][0-9]*/ 一個或一個以上數字
FILENAME 文件名
OFS 輸出字段分隔符,默認也是空格,可以改為制表符等
ORS 輸出的記錄分隔符,默認為換行符,既處理結果也是一行一行輸出
-F '[:#/]' 定義三個分隔符
print 是awk打印指定內容的主要命令