正則就是有一定規律的字符串,有幾個特殊符號很關鍵(. * + ? | ),我們平時不僅可以用命令行工具grep/sed/awk去引用正則,而且還可以把正則嵌入在nginx、apache、甚至php、python編程語言當中,學好正則可以讓你受用無窮!
一、grep/egrep
1. 語法+選項
語法: grep [-cinvABC] 'word' filename
-c :打印符合要求的行數
-n :在輸出符合要求的行的同時連同行號一起輸出
-v :打印不符合要求的行
-A :後跟一個數字(有無空格都可以),例如 –A2則表示打印符合要求的行以及下面兩行
-B :後跟一個數字,例如 –B2 則表示打印符合要求的行以及上面兩行
-C :後跟一個數字,例如 –C2 則表示打印符合要求的行以及上下各兩行
-r : 會把目錄下面所有的文件全部遍歷
2. 例子介紹
過濾出帶有某個關鍵詞的行並輸出行號 grep -n 'root' 1.txt
過濾出不帶有某個關鍵詞的行並輸出行號grep -n -v 'root' 1.txt
過濾出所有包含數字的行 grep '[0-9]' 1.txt
過濾出所有不包含數字的行 grep -v '[0-9]' 1.txt
去除所有以'#'開頭的行 grep -v '^#' 1.txt
去除所有空行和以'#'開頭的行 grep -v '^$' 1.txt|grep -v '^#'
過濾出以英文字母開頭的行 grep '^[a-zA-Z]' 1.txt
過濾出以非數字開頭的行 grep '^[^0-9]' 1.txt
過濾任意一個或多個字符 grep 'r.o' 1.txt; grep 'r*t' 1.txt; grep 'r.*t' 1.txt
. 表示任意一個字符;*表示零個或多個前面的字符 ;.*表示零個或多個任意字符,空行也包含在內
指定過濾字符次數 grep 'o\{2\}' 1.txt
3. egrep
egrep工具 是grep工具的擴展
egrep 'o+' 1.txt 表示1個或1個以上前面字符
egrep 'o?' 1.txt 表示0個或者1個前面字符
egrep 'roo|body' 1.txt 匹配roo或者匹配body
egrep 'r(oo)|(at)o' 1.txt 用括號表示一個整體
egrep '(oo)+' 1.txt 表示1個或者多個 'oo'
4. . * + ? 總結
. 表示任意一個字符(包括特殊字符)
* 表示零個或多個*前面的字符
.* 表示任意個任意字符(包含空行)
+ 表示1個或多個+前面的字符
? 表示0個或1個?前面的字符
其中,+ ? grep不支持,egrep才支持。
二. sed
打印指定行 sed '10'p -n 1.txt; sed '1,4'p -n 1.txt; sed '5,$'p -n 1.txt
打印包含某個字符串的行 sed -n '/root/'p 1.txt 可以使用 ^ . * $等特殊符號
-e 可以實現同時進行多個任務 sed -e '/root/p' -e '/body/p' -n 1.txt 也可以用;實現 sed '/root/p; /body/p' -n 1.txt
刪除行 sed '/root/d' 1.txt; sed '1d' 1.txt; sed '1,10d' 1.txt
替換 sed '1,2s/ot/to/g' 1.txt, 其中s就是替換的意思,g爲全局替換,否則只替換第一次的,/也可以爲 #, @ 等
刪除所有數字 sed 's/[0-9]//g' 1.txt
刪除所有非數字 sed 's/[^0-9]//g' 1.txt
調換兩個字符串位置 head -n2 1.txt |sed 's/\(root\)\(.*\)\(bash\)/\3\2\1/'
直接修改文件內容 sed -i 's/ot/to/g' 1.txt
sed練習題:
把/etc/passwd 複製到/root/test.txt,用sed打印所有行
打印test.txt的3到10行
打印test.txt 中包含 'root' 的行
刪除test.txt 的15行以及以後所有行
刪除test.txt中包含 'bash' 的行
替換test.txt 中 'root' 爲 'toor'
替換test.txt中 '/sbin/nologin' 爲 '/bin/login'
刪除test.txt中5到10行中所有的數字
刪除test.txt 中所有特殊字符(除了數字以及大小寫字母)
把test.txt中第一個單詞和最後一個單詞調換位置
把test.txt中出現的第一個數字和最後一個單詞替換位置
把test.txt 中第一個數字移動到行末尾
在test.txt 20行到末行最前面加 'aaa:'
三. awk
截取文檔中的某段 awk -F ':' '{print $1}' 1.txt
也可以使用自定義字符連接每個段 awk -F':' '{print $1"#"$2"#"$3"#"$4}' 1.txt
匹配字符或字符串 awk '/oo/' 1.txt
針對某個段匹配 awk -F ':' '$1 ~/oo/' 1.txt
多次匹配 awk -F ':' '/root/ {print $1,$3}; $1 ~/test/; $3 ~/20/' 1.txt
條件操作符==, >,<,!=,>=;<=
awk -F ':' '$3=="0"' 1.txt;
awk -F ':' '$3>="500"' 1.txt;
awk -F ':' '$7!="/sbin/nologin"' 1.txt;
awk -F ':' '$3<$4' 1.txt ;
awk -F ':' '$3>"5" && $3<"7"' 1.txt
awk -F ':' '$3>"5" || $7=="/bin/bash"' 1.txt
awk內置變量 NF(段數) NR(行數)
head -n3 1.txt | awk -F ':' '{print NF}'
head -n3 1.txt | awk -F ':' '{print $NF}'
head -n3 1.txt | awk -F ':' '{print NR}'
打印20行以後的行awk 'NR>20' 1.txt
awk -F ':' 'NR>20 && $1 ~ /ssh/' 1.txt
更改某個段的值awk -F ':' '$1="root"' 1.txt
數學計算, 把第三段和第四段值相加,並賦予第七段 awk -F ':' '{$7=$3+$4; print $0}' 1.txt
計算第三段的總和 awk -F ':' '{(tot=tot+$3)}; END {print tot}' 1.txt
awk中也可以使用if關鍵詞 awk -F ':' '{if ($1=="root") print $0}' 1.txt
awk練習題
用awk 打印整個test.txt (以下操作都是用awk工具實現,針對test.txt)
查找所有包含 'bash' 的行
用 ':' 作爲分隔符,查找第三段等於0的行
用 ':' 作爲分隔符,查找第一段爲 'root' 的行,並把該段的 'root' 換成 'toor' (可以連同sed一起使用)
用 ':' 作爲分隔符,打印最後一段
打印行數大於20的所有行
用 ':' 作爲分隔符,打印所有第三段小於第四段的行
用 ':' 作爲分隔符,打印第一段以及最後一段,並且中間用 '@' 連接 (例如,第一行應該是這樣的形式 'root@/bin/bash' )
用 ':' 作爲分隔符,把整個文檔的第四段相加,求和
正則
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
java工作流引擎證照庫類型的流程設計 實現方案與演示案例
ccjflow
2019-02-24 13:51:20
細述編程語言的發展過程
wx5c32e73d37a3a
2019-02-24 13:35:46
Python3高级核心技术97讲
wy53780
2020-04-23 15:37:39
python網絡爬蟲
aabcdqt
2019-05-06 20:35:05
Python與家國天下
豌豆花下貓
2019-02-24 22:22:40
seaborn 安裝成功 + ImportError: DLL load failed: 找不到指定的模塊 問題解決
耗子
2019-02-24 19:55:04
使用 Sphinx 撰寫技術文檔並生成 PDF 總結
qiwihui
2019-02-24 16:25:14
Python實現二叉樹相關算法
backbp
2019-02-24 15:35:06
Ubuntu16.04安裝Python3.7及其pip3並切換爲默認版本
ipromise
2019-02-24 14:15:00
Python2+Selenium入門05-關於WebElement類
白雪
2019-02-24 13:45:04
Python——數據類型
陳晨工程師
2019-02-24 13:43:55
Python 操作PDF庫介紹之PDFMiner
iCloudEnd
2019-02-24 13:39:59
Python reportlab 之 draw函數介紹
iCloudEnd
2019-02-24 13:39:59
Python reportlab之pdfgen 介紹(含代碼)
iCloudEnd
2019-02-24 13:39:59
Python手繪圖瞭解一下!
python攻城獅
2019-02-24 13:34:06