正則表達式
正則表達式是用來處理字符串的,可以用一些特定字符來描述字符串裏字符出現的規則,從而匹配,提取或者替換符合某一個規則的字符串。
通過特殊字符進行匹配一段字符串
正則表達式:
標準字符與元字符(特殊字符)構造
grep可以使用基礎正則表達式,處理行
[]內爲"或"只能出現一個
grep -n 'sh[io]rt' test.txt //-n顯示行號
[^w]
grep -n '[^w]oo' test.txt //匹配三個字母,不是woo就可以
grep -n '[^a-z]oo' test.txt //oo前不是小寫字母
grep -n '[0-9]' test.txt //匹配單一數字
grep -n '^[^a-Z]' test.txt //不已a-Z開頭的行
"."表示匹配一個任意字符
grep -n 'w..d' a.txt
"":號前面的字符出現0次或多次
grep -n 'abc*' a.txt //可以匹配 ab abc abcc abcc……
".*" :匹配任意長度任意字符
grep -n "w.*p" a.txt
{n}:大括號前字符出現n次 {n,m}:大括號前的字符出現n到m次 {n,}:至少出現n次
grep -n "o{2,5}" a.txt // "\"表示轉義
擴展正則表達式
"+":+號前字符至少出現1次
egrep -n "wo+d" a.txt //匹配最小爲 wod
"?":問號的字符出現一次或0次
egrep -n "bes?t" a.txt
"|":表示"或"
egrep "of|is|on" a.txt
():以|進行分割逐個匹配
egrep "t(a|e)st" a.txt
()+:括號內的一串字符出現一次或多次
egrep "A(xyz)+C" a.txt
sed文本編輯工具:在過濾的時候進行更改文件(常用於shell腳本)
-n 顯示修改後的行
sed -n '3,5p' test.txt //3到5行 p打印出來
打印奇數行
nl test.txt | sed -n 'p;n' //n下一行
打印偶數行
nl test.txt | sed -n 'n;p'
從第10行開始打印
nl test.txt | sed -n '10,${p;n}'
打印包含the的行 正則表達式用//括起來
sed -n '/the/p' test.txt
從第四行開始打印包含the的行
sed -n '4,/the/p' test.txt
=表示打印行號
sed -n '/the/=' test.txt
以PI開頭
sed -n '/^PI/p' test.txt
精確匹配一個單詞
sed -n '/\<wood\>/p' test.txt
刪除包含cross的行
nl test.txt | sed '/cross/d'
刪除以.結尾的行
sed '/.$/d' a.txt
替換
sed 's/the/THE/' a.txt
在每行的前面加入一個#號
sed -i 's/^/#/' b.txt
刪除第三行的#號
sed -i '3s/#//' b.txt
剪切the行,粘貼到最後一行
sed '/the/{H;d};$G' a.txt //H 複製 G 粘貼
過濾並保存到abc.txt
sed '/the/w abc.txt' test.txt //w保存
追加abc.txt裏的內容追加到每個the行的下面
sed '/the/r abc.txt' test.txt //r追加
awk文本編輯工具
sed逐行進程操作,awk可以基於段進行操作
以":"進行分割,打印第1段和第3段 逐行操作
awk -F ':' '{print $1 $3}' /etc/passwd //默認以空格進行分割
awk內建變量
FS:分割符,默認爲空格
NF:正在操作的行分了幾個字段
NR:當前操作的行號
$0:當前操作行的內容
$n:當前操作的是第幾段
FILENAME:操作的文件名
RS:基於什麼判斷行數,\n回車換行
打印1~3行
awk 'NR==1,NR==3{print}' test.txt
打印行號大於等於1小於等於3的行
awk 'NR>=1&&NR<=3 {print}' test.txt
統計文件內以/bin/bash結尾的行
awk 'BEGIN {x=0}; /\/bin\/bash$/{x++};END {print x}' /etc/passwd
感謝閱讀