正則表達式及grep
阿新 • • 發佈:2018-06-29
-o gin option graph 查找 pat 區別 passwd MF 一、正則表達式
-v:取反,顯示匹配到的以外的字符串
--color:將匹配到的字符串顯示顏色
例如:
正則表達式 Regular Expression ,簡稱REGEXP,用來檢索、替換某些符合某個模式的文本。
正則表達式元字符有:
. :匹配任意單個字符
[] :匹配指定範圍內的單個字符
[^] :匹配指定範圍外的 單個字符
字符集和有(可以使用man grep查看):[:alnum:], [:alpha:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:], [:upper:], [:xdigit:]
匹配次數(貪婪模式匹配盡可能多的)
* :匹配前面的字符任意次數 \? :匹配前面的字符一次或0次 \{m,n\} :匹配前面的字符至少m次,最多n次 列如有字符:a,b,ab,abb,aab,axb,amnb,那麽a*b,a?b,a.*b會匹配到的字符串有: a*b(表示a可以出現任意次可以沒有,後面接字符b) :b, ab,abb,aab,axb,amnb a\?b(表示a可以出現一次或0次,後面接字符b,問號要轉義) :b,ab,abb,aab,axb,amnb a.*b(表示ab之間可以有任意字符):ab,abb,aab,axb,amnb a\{1,3\}b(表示a最少出現1次,最多出現3次):ab,abb,aab (以上使用grep測試得出)
位置錨定,即匹配指定位置出現的字符串
^ :錨定行首,後面出現的字符串只能在行首出現
$:錨定行尾,後面出現的字符串只能在行尾出現
^$:匹配空白行
\<或\b :其後面出現的字符必須作為單詞的首部出現
\>或\b :其後面出現的字符必須作為單詞的尾部出現
分組:
\(\):一般和\1,\2,\3一起使用
二、grep
grep:根據模式搜索,並將模式的文本行顯示出來
用法:grep [OPTIONS] PATTERN [FILE...]
PATTERN:是文本字符和元字符組合而成的匹配條件
常用參數:
-i :忽略大小寫
-o :僅顯示匹配到的字符串
--color:將匹配到的字符串顯示顏色
例如:
新建grep.txt文本,內容如下:
she like his liker.
he love she also love.
he like his lover.
1.列出符合 l..e 的行(l和e之間占任意兩個字符)
2.只顯示匹配到的字符串 -o
3.忽略大小寫匹配 -i
4.取反 -v
5.顯示/proc/meminfo文件中以不區分大小的s開頭的行;
grep -i ‘^s‘ /proc/meminfo
grep ‘^[sS]‘ /proc/meminfo
6.顯示/etc/passwd中以nologin結尾的行;
grep ‘nologin$‘ /etc/passwd
7.取出默認shell為/sbin/nologin的用戶列表
grep "nologin$‘ /etc/passwd | cut -d: -f1
8.取出默認shell為bash,且其用戶ID號最小的用戶的用戶名
grep ‘bash$‘ /etc/passwd | sort -n -t: -k3 | head -1 | cut -d: -f1
9.顯示/etc/inittab中以#開頭,且後面跟一個或多個空白字符,而後又跟了任意非空白字符的行;
grep "^#[[:space:]]\{1,\}[^[:space:]]" /etc/inittab
10.顯示/etc/inittab中包含了:一個數字:(即兩個冒號中間一個數字)的行;
grep ‘:[0-9]:‘ /etc/inittab
11.顯示/boot/grub/grub.conf文件中以一個或多個空白字符開頭的行;
grep ‘^[[:space:]]\{1,\}‘ /boot/grub/grub.conf
12.顯示/etc/inittab文件中以一個數字開頭並以一個與開頭數字相同的數字結尾的行;
grep ‘^\([0-9]\).*\1$‘ /etc/inittab
13.找出/proc/cpuinfo文件中的,1位數,或2位數;
grep ‘[0-9]\{1,2\}‘ /proc/cpuinfo (找出滿足有一位或兩位數字的行)
grep --color ‘\<[0-9]\{1,2\}\>‘ /proc/cpuinfo (找出滿足有一位或兩位數字的行,且這數字只能是一個單詞)
14.查找當前系統上名字為student(必須出現在行首)的用戶的帳號的相關信息, 文件為/etc/passwd
grep ‘^student\>‘ /etc/passwd
或者 id student
三、其它
正則表達式用法很靈活,較復雜,更多的用法上百度查找。
正則表達式和通配符的區別,不要搞混淆了,想了解通配符查看“bash及其特性“文檔。
正則表達式及grep