shell 下正則表達式的匹配

一、用法講解

(1).匹配任意單字符
例如:..xc..表示第一、二、五、六個字母任意三四個字母是xc的字符串
(2)^匹配字符串的開頭的字母
例如:^d表示以d開頭的字符串
(3)$匹配字符串結尾的字母
trobule$表示匹配以trobule結尾的行
d$表示匹配以字母d結尾的字符
(4)^$表示匹配空行
^.$匹配只包含一個字母的行
(5)*匹配字符串中單個字符或其重複序列
compu*t表示匹配一個或多個u的字符串,如compuut,comput,compuuuut等
(6)\屏蔽一個特殊字符
特殊字符包括:$.'"*[]^|0\+?
如要顯示*.pas,則可用\*\.pas表示
(7)[]匹配一個範圍或集合
比如[0-9]表示匹配0到9的十個數字
(8)\{\}匹配模式結果出現的次數
比如:
pattern\{n\}匹配模式出現n次
pattern\{n,\}匹配模式至少出現n次
pattern\{n,m\}匹配模式出現n到m次

(9)經常使用的正則表達式

^行首
$行尾
^[the]以the開頭
[Ss]igna[Ll]匹配Signal,signal,signaL,SignaL
[Ss]igna[Ll]\.同時,加一句號.
[mayMAY]包含may大寫或小些字母的行
^user$只包含user的行
[tty]$以tty結尾的行
\.帶句號的行
^d..x..x..x用戶、組、其他用戶均有執行權限的目錄
^[^l]排除關聯目錄的目錄列表
[.*0]0之前後之後加任意字符
[000*]000或者更多個
[^$]空行
[^.*$]匹配行中任意字符串
^......$包括6個字符的行
[a-zA-Z]任意單字符
[^0-9\$]非數字或$字母
[123]數字1到3中的一個
[Dd]evice單詞Device或device
de..ce前兩個是de後跟兩個任意字符,最後兩個是ce
\^q以^q開始行
^.$只有一個字符的行
^\.[0-9][0-9]以.和兩個數字開始的行


二、shell相關

1.取子串常用

(1)echo ${string:1:2}

(2)echo $string |cut -c 2-3 (取string 的第2到第3個字符)
2.對字符串的處理

包括:截取,連接,匹配,替換,翻轉

1.截取
方法一
echo $a|awk '{print substr( ,1,9)}'
substr是awk中的一個子函數,對第一個參數的進行截取,從第一個字符開始,共截取9個字符,如果不夠就從第二個字符中補
方法二
echo $a|cut -b2-9
cut:對標準輸入的字符串進行處理
cut -bn-m:以byte爲單位,從第n個byte開始,取m個
cut -bn,m:以byte爲單位,截取第n,m個byte
cut -b-n,m:以byte爲單位,截取1-n,和第m個
-c:以charactor爲單位
-d:指定分隔符,默認爲tab
-s:使標準輸入中沒有delimeter
cut -f1:截取第1個域 
方法三
a=123456
echo ${string:1:2}
方法四
使用sed截取字符串的最後兩位
echo $test |sed 's//(.*/)/(../)$//'
截取字符串的前2位
echo $test |sed 's/^/(../)/(.*/)//'

2.連接
$a$b
或者
$string 

3.匹配

查找目錄下所有文件內容含有"aaa"的文件

grep -r "aaa" ./

4.替換

將一批文件中的所有string替換
vi打開

:%s/原串/新串/


5.翻轉(未測試)
方法一:
使用rev命令
方法二:
編寫腳本實現
#!/usr/bin/awk -f
################################################################
# Description : duplicate rev in awk
################################################################
{
revline = ""
for (i=1;i<=length;i++)
{
revline = substr(,i,1) revline
}
}
END{print revline}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章