1. 程式人生 > >shell學習之正則表達式

shell學習之正則表達式

passwd 過濾 表達式 roo 輸出 shel 數字和字母 {} 轉義

一、grep使用
...
語法: grep [-cinvABC] ‘word‘ filename

-c :打印符合要求的行數

-i :忽略大小寫

-n :在輸出符合要求的行的同時連同行號一起輸出

-v :打印不符合要求的行

-A :後跟一個數字(有無空格都可以),例如 –A2則表示打印符合要求的行以及下面兩行

-B :後跟一個數字,例如 –B2 則表示打印符合要求的行以及上面兩行

-C :後跟一個數字,例如 –C2 則表示打印符合要求的行以及上下各兩行
...
grep -n ‘root‘ /etc/passwd
過濾出帶關鍵字root的行並輸出行號
grep -nv ‘root‘ /etc/passwd
v是取反的意思

過濾出不帶關鍵字root的行並輸出行號
...
grep ‘^[^a-zA-Z]‘ test.txt
[^]表示不在這個範圍內的
^代表以後面的開頭的
...
grep -v ‘^#‘ /etc/crontab |grep -v ‘^$‘
正則中^表示以什麽開頭的行,^$表示以什麽結尾的行
‘^$‘可以表示空行
...
grep ‘r..o‘ /etc/passwd
.代表一個任意字符
上例中,就是把符合r與o之間有兩個任意字符的行過濾出來
...
grep ‘ooo‘ /etc/passwd
ooo
表示o或oo或ooo或更多的o,代表任意個
...
grep ‘.
‘ /etc/passwd |wc -l
‘.‘表示0個過著多個任意字符
空行也包含在內
...
grep ‘o{2}‘ /etc/passwd
過濾出現‘oo‘的行
花括號 { 和 } 的左邊都需要加上轉義字符 ‘\‘,
{}裏還可以寫成{n1,n2}的形式,
大於n1小於n2次的,
n2可以為空,表示大於等於n1次的
...
二、sed使用
sed -n ‘2‘p /etc/passwd
p是print打印的意思
單引號內的 ‘2‘表示第幾行
sed -n ‘1,$‘p /etc/passwd
這樣表示打印所有的行
sed -n ‘2,4‘p /etc/passwd
這樣表示一個區間,第二行到第四行
...
sed -n ‘/root/‘p test.txt
表示打印含有字符串root的行
grep中的
$ . ^ 同樣可以使用
sed -n ‘/ooo/‘p test.txt
...
sed -e ‘1‘p -e ‘/111/‘p -n test.txt
-e可以實現多個行為
打印第一行和包含111的行
...
sed ‘1‘d test.txt
sed ‘/root/‘d test.txt
sed ‘1,3‘d test.txt
刪除某行或包含某字符的行或多行
...
sed ‘1,2s/ot/to/g‘ test.txt
用to替換1到2行的ot
s為替換的意思,g是全局的意思,
如果不加 ‘g’ 只換該行中出現的第一個
/分隔符也可以換成其他特殊字符如# @

sed ‘1,3s@to@ot@g‘ test.txt
...
sed ‘s/[0-9]//g‘ test.txt
替換所有的數字
sed -e ‘s@[1-9]@@g‘ -e ‘s/[a-zA-Z]//g‘ test.txt
tihua替換所有的數字和字母
...
sed ‘s@(rot)(.)(bash)@\3\2\1@‘ test.txt
此題可把rot對應著3,rot與bash中間的字符對應著2,bash對應著1
然後把它們按照123的順序排列出來。
例如test.txt原來裏的內容為rot:123:bash
命令執行後輸出bash:123:rot
...
sed ‘s/^.
$/123&/‘ test.txt
匹配任意字符開頭任意字符結尾的行,並把行首字符替換為123
加上&不覆蓋原行內容
...
sed -i ‘s/ro/to/g‘ test.txt
直接修改源文件的內容

shell學習之正則表達式