正則表達式
正則表達式是用來處理字符串的,能夠用一些特定字符來描述字符串裏字符出現的規則,從而匹配,提取或者替換符合某一個規則的字符串。正則表達式
經過特殊字符進行匹配一段字符串shell
正則表達式:bash
標準字符與元字符(特殊字符)構造
grep可使用基礎正則表達式,處理行ide
[]內爲"或"只能出現一個工具
grep -n 'sh[io]rt' test.txt //-n顯示行號code
[^w]進程
grep -n '[^w]oo' test.txt //匹配三個字母,不是woo就能夠字符串
grep -n '[^a-z]oo' test.txt //oo前不是小寫字母it
grep -n '[0-9]' test.txt //匹配單一數字io
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
感謝閱讀