*基礎正規表達式:basic regular expression BRE
包括:^ $ . [] [^]
和擴充正則不同的是grep和sed不需要加參數也可以使用
-
^
^d 以d開頭的行,例如:ls l|grep "^d" 給三劍客使用
隻檢視以d開頭的行,正規表達式的意思為,以.....開頭,^d就是以d開頭
[root@yxd data]# grep '^m' oldboy.txt 以m開頭的行
my qq is 49000448
-
$
以什麼什麼結尾的行,例如
grep "m$" yxd.txt 就是以m結尾的行
[root@yxd data]# grep 'm$' oldboy.txt 如果m後邊有空格就是空格結尾,查找不到
-
^$
表示空行,什麼符号都沒有,例如
grep -n "^$" yxd.txt 因為空格不好顯示,加行号可以看出來一般用-v排除
-
.
代表任意一個字元,文本,符号。不比對空格,
grep '.' yxd.txt一個字元一個字元查找,可配合grep -o 檢視比對過程
也可以在字元中代替任意一個字元,模糊查找。
例如:grep "ol.y" oldy.txt
I am oldboy teacher!
my god ,i am not olbey
或者檢視全部内容grep "." oldboy.txt 表示查找全部字元,不包括空行
查找以點結尾的内容grep ".$" oldboy用\還原屬性
-
*
前一個文本或字元連續出現0次或0次以上.
例如 grep '0' yxd.txt 會把所有檔案顯示,代表0出現0次或者0次以上,要找0所在的行指令為
grep '0 ' yxd.txt 0後加空格
grep -o 'bl ' oldboy.txt查找bl 前一個字元顯示零次,是以星号前相當于出現0次,代表出現0次就是沒有
[root@yxd data]# grep -o 'bl ' oldboy.txt
bl
grep -o 'bl' oldboy.txt
b
grep "god" a.log 代表o出現0次或者多次
good
gd
god
goood 查找go開頭的o出現0次或者多次,"god"=gd的原因為"go{0}d"代表o出現0次,什麼也沒有,是以有gd
-
重複前邊的任意一個符号,也就是所有文本字元,包括空行
以任意符号開頭一直到字母o
grep '^.o' yxd.txt
[root@yxd data]# grep '^.o' oldboy.txt
一直到一行最後一個o才結束,貪婪性.所有符号,任何符号,連續出現的字元,有多少比對多少
找出以m開頭,以m結尾的行
grep '^m.m$' oldboy.txt
-
\
轉義字元,符号,讓有特殊意義的符号回歸原型,例如:.就表示點
例如:找出以點結尾的行
grep '.$' oldboy.txt
19.3.7.2 \n
表示回車
19.3.8 [ ]
-
+
前一個字元連續出現1次或一次以上,排查時隻顯示字母所在的一行。
egrep 'a+' yxd.txt和不同的是 隻顯示帶有a的一行
例如:grep -E '[a-z]+' oldboy.txt或者grep '[a-z]+' oldboy.txt取出檔案中連續小寫的行,加了+就不是一個字元一個字元找,一個單詞一個單詞找。
可以把連續出現的東西連成一個整體
ifconfig eth0|awk 'NR==2'|awk -F '[ :]+' '{print $4}' +号代表檔案多個空格化為連續的一個空格
[root@yxd data]# grep -E '[a-z]+' oldboy.txt -o
am
oldboy
teacher
teach 不加+就是一個字元一個字元比對,加了是比對到結束為止,也就是空格或者符号中斷,接着比對
一般和[]配合使用,取出連續的字元
-
|
或者的意思egrep "100|200" /etc/services grep需要加e進化才能用
-
()
表示一個整體。egrep 'oldb(o|e)y' oldboy 表示的為oldboy|oldbey
常用于反向引用/後向引用(sed常用)
例如:echo 123456|sed -r 's#(.)#<\1>#g'
<123456> 引用括号裡的内容,防在後邊使用\1表示括起來的第一個内容
echo 123456|sed -r 's#(34)#<\1>#g' 隻引用34
echo 123456|sed -r 's#(.).(..).(.)#<\2>#g'
這裡的\2表示括起來的第幾個,引用第幾個括号裡的内容。
可以\2\3表示使用引用的第2塊和第3塊
反向引用增加内容
也可以增加内容
[root@yxd ~]# find /root/ -type f -name 'yxd.txt'|xargs sed -ri 's#(.)#www.\1.org#g'
[root@yxd ~]# cat yxd.txt
www.yxd.org
www.yx.org
- 前一個字元重複幾次