第十一章?[endif]Linux正則表達式與三劍客知識應用實踐
1、什么是正則表達式:
作用和特殊字符一樣
正則表達式是為處理大量的字符串及文本而定義的一套規則和方法
假設@代表“i am”, ?“!”代表“oldboy”
則執行ceho“@!”就表示輸出“i am oldboy”
2、提高效率,快速獲取到想要的內容
3、適用于三劍客命令:grep(egrep), sed ,awk
以行為單位處理,
4、實踐講解
易混淆事項
1、 和通配符區別
2、和開發正則有區別。一般是perl兼容正則表達式。
3、 Linux系統三劍客
環境準備:
export ?LC_ALL=C
分類
1、BRE ? grep
2、GRE? 加-E或egrep
Test目錄輸入這些進行環境準備
mkdir?~/test?-pcat?>~/test/oldboy.txt<<EOF
I?am?oldboy?teacher!I?teach?linux.I?like?badminton?ball?,billiard?ball?and?chinese?chess!our?site?is?http://www.oldboyedu.commy?qq?num?is?49000448.not?4900000448.my?god?,i?am?not?oldbey,but?OLDBOY!EOF
ls -lF /data|grep “/$”查找斜線結尾
cat oldboy.txt -n (顯示行號查找)
Linux 正則符號釋義
基本正則:grep開頭搜索等
^尖角號 以。。。開頭 ^oldboy 以oldboy開頭
$美元符 以。。。結尾 oldboy$ 以oldboy結尾
^$ 空行 以開頭結尾,以結尾開頭
. 匹配任意一個且只有一個字符 和通配符?含義一樣
\ 讓更有意義的字符脫掉馬甲,還原本意
* 重復前面字符0次或多次
.* 表示所有內容
^.* 組合符 匹配以任意多個字符開頭的內容
.*$ 以任意0個字符或多個字符結尾
[abc] 匹配[]集合內的任意一個字符a或b或c;[abc]可以寫成[a-c]
[^abc] 匹配不包含^后的任意字符a或b或c
擴展正則(GRE) 加-E或egrep:
+ 匹配前一個字符一次或多次
[:/]+ ?匹配括號內:或/字符1次或1次以上
?匹配一個字符0次或1次
| 或者同時過濾多個字符串
a{n,m} 匹配前a字符最少n次,最多m次
a{n,} 匹配前a字符最少n次
a{n} 匹配前a字符正好n次
a{,m} 匹配前a字符最多m次
()分組過濾被括起來的東西表示一個整體
\n引用前面()小括號里的內容,例如:(aa)、1,匹配aaaa
特殊符號中括號
[:alnum:] 匹配任意一個字母或數字字符,相當于[a-zA-Z0-9] ??[[:alnum:]]
元字符:
\b ?只匹配單詞??相當于grep -w ?過濾單詞
-d 匹配單個數字字符(需用grep -p)
sed:流編輯器(三劍客之老二)
老大awk老二 sed ??老三grep
Sed是操作、過濾、和轉換文本內容的強大工具
命令格式:
sed?[選項]??[sed內置命令字符]??[輸入文件]
選項:
-n ???取消默認sed輸出,常與sed
-i ???直接修改文件的內容,而不是輸出到終端
內置命令字符說明
s 替換
g 全局global
p 打印 peint
d刪除 delete
問題1:輸出oldboy.txt的第2-3行內容※。打印行
[root@liutengda58~/test]# sed -n '2,3p' oldgirl.txt
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldboyedu.com
問題二過濾出含有oldboy字符串的行 ?
用grep過濾:
[root@liutengda58 ~/test]# grep oldboy oldgirl.txt
I am oldboy teacher!
our site is http://www.oldboyedu.com
用sed過濾:
[root@liutengda58~/test]# sed?-n ?'/oldboy/p'??oldgirl.txt
I am oldboy teacher!
our site is http://www.oldboyedu.com
問題三:刪除oldboy字符串的行
[root@liutengda58~/test]# sed ?‘/oldboy/d’ ?oldgirl.txt
I am oldboy teacher!
our site is http://www.oldboyedu.com
問題四:講oldboy字符串全部替換為oldgril
Vim替換:
:%s/oldboy/oldgirl/g
Sed:
Sed‘s#想替換啥#用啥換#g' 文件名
[root@liutengda58~/test]#?sed 's#oldboy#oldgirl#g' oldgirl.txt
I am oldgirl teacher
I like badminton ball ,billiard ball and chinese chess!
our site is http://www.oldgirledu.com
my qq num is 49000448.
問題五:將文件中的oldboy字符串全部替換為oldgirl 同時將123515替換成123144
連續替換
Sed ?-e ?‘s#oldboy#oldgirl#g’??-e ?‘s#123515#123144#g’??oldboy.txt