標籤:linux
個人見解:我認為Linux中的文本處理命令 grep egrep fgrep命令 其實只要牢牢掌握grep就可以了 因為其他兩個幾乎是一樣的 不一樣的地方也很好區分
grep 基本使用方法:
使用方法 grep [選項] ‘運算式‘ #學習的時候沒好好聽 不知道自己寫錯沒 為了這篇博文的通常 我還是先不看之前學習的視頻了
這裡的常用選項有 -o -v -i -n -A -B -C -數字 -E
[email protected]:~# grep -o ‘^root:‘ /etc/passwd #-o 選項是只顯示匹配到的內容root: [email protected]:~# grep -v ‘^root:‘ /etc/passwd #-v 選項是顯示不是匹配的內容行daemon:x:1:1:daemon:/usr/sbin:/bin/shbin:x:2:2:bin:/bin:/bin/shsys:x:3:3:sys:/dev:/bin/shsync:x:4:65534:sync:/bin:/bin/syncgames:x:5:60:games:/usr/games:/bin/shman:x:6:12:man:/var/cache/man:/bin/shlp:x:7:7:lp:/var/spool/lpd:/bin/shmail:x:8:8:mail:/var/mail:/bin/shnews:x:9:9:news:/var/spool/news:/bin/shuucp:x:10:10:uucp:/var/spool/uucp:/bin/shproxy:x:13:13:proxy:/bin:/bin/shwww-data:x:33:33:www-data:/var/www:/bin/shbackup:x:34:34:backup:/var/backups:/bin/shlist:x:38:38:Mailing List Manager:/var/list:/bin/shirc:x:39:39:ircd:/var/run/ircd:/bin/shgnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/shnobody:x:65534:65534:nobody:/nonexistent:/bin/shlibuuid:x:100:101::/var/lib/libuuid:/bin/shsyslog:x:101:103::/home/syslog:/bin/falsemessagebus:x:102:105::/var/run/dbus:/bin/falsebind:x:103:108::/var/cache/bind:/bin/falselandscape:x:104:109::/var/lib/landscape:/bin/falsesshd:x:105:65534::/var/run/sshd:/usr/sbin/nologinmariadb:x:1000:1000::/home/mariadb:/sbin/nologinwww:x:1001:1001::/home/www:/sbin/nologin [email protected]:~# grep -n ‘^root:‘ /etc/passwd #-n 選項是會顯示匹配行所在檔案中的行1:root:x:0:0:root:/root:/bin/bash [email protected]:~# grep -A1 ‘^root:‘ /etc/passwd #-A數字 是顯示匹配行並向下顯示n行root:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/bin/sh [email protected]:~# grep -B1 ‘^daemon:‘ /etc/passwd #-B數字 是顯示匹配行並向上顯示n行root:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/bin/sh [email protected]:~# grep -C1 ‘^daemon:‘ /etc/passwd #-C數字 是顯示匹配行並向上向下顯示n行root:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/bin/shbin:x:2:2:bin:/bin:/bin/sh [email protected]:~# grep -1 ‘^daemon:‘ /etc/passwd #-數字選項同-Croot:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/bin/shbin:x:2:2:bin:/bin:/bin/sh [email protected]:~# grep -i ‘^ROOT:‘ /etc/passwd #-i 選項 其實就是忽略匹配內容的大小寫root:x:0:0:root:/root:/bin/bash
這裡把-E選項單獨拿出來說是因為這個東西有時候很可能就被忽略了 用了-E選項 grep就可以使用正則擴充運算式了,不然grep只能使用標準Regex
具體使用 還是等下在下面說吧。
grep 字元匹配:
在Regex中我們還有不少字元集匹配的功能 #個人見解 這些字元集需要好好記住 能在以後的使用中簡潔代碼和更方便的使用Regex
* #表示*前字元任意次數 包括0次\? #表示\前內容出現0或者1次\{m\} #表示它前的字元要出現m次\{m,n\} #表示它前的字元至少出現m次,最少出現n次\{m,\} #表示它前的字元至少出現m次\{0,n\} #表示它前的字元最多出現n次. #匹配單個任意的字元[] #匹配指定範圍內的任意單個字元.* #這裡就是表示任意長度的任一字元[[:digit:]] #匹配0-9的單個數字,在這裡是不是認為[0-9]寫法更好?其實錯了 等使用Regex的時候 會發現[[:digit:]]使用更方便[[:lower:]] #匹配單個小寫字母同[a-z][[:upper:]] #匹配單個大寫字母同[A-Z][[:space:]] #匹配單個空白字元 包括 空格 定位字元[[:alpha:]] #匹配單個大小寫字母[[:punct:]] #匹配單個標點符號 [^[:punct:]] 這樣其實就是下面的[[:alnum]][[:alnum:]] #匹配單個非標點的字元 [^[:alnum:]]這樣就是上面的[[:punct:]][^] #通過上面兩行就不難理解了 [^]是取反的意思:
grep的錨定:
^ #行首錨定$ #行尾錨定^$ #空白行\< #詞首錨定也可以用\b\> #詞尾錨定也可以用\b
grep 分組
分組需要使用\(\)例如:\(ab\)*分組中的模式比對到的內容,可由Regex引擎記憶在記憶體中,之後可被引用引用:例如\(ab\(x\)y\).*\(mn\)有編號:自左而後的左括弧,以及與其匹配右括弧\(a\(b\(c\)\)mn\(x\)\).*\1#: 引用第n個括弧所匹配到的內容,而非模式本身例如:\(ab\?c\).*\1
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/3C/B9/wKioL1PDIInBVUjNAAFx_8R8lkA107.jpg" title="Linux-grep-分組-使用方法11.png" alt="wKioL1PDIInBVUjNAAFx_8R8lkA107.jpg" />
如我們引用的時候使用方法是:從左開始是數左括弧 遇到一個就是一個組
樣本:
1、顯示/proc/meminfo檔案中以大寫或小寫S開頭的行;# grep -i ‘^s‘ /proc/meminfo# grep ‘^[Ss]‘ /proc/meminfo# grep -E ‘^(S|s)‘ /proc/meminfo2、顯示/etc/passwd檔案中其預設shell為非/sbin/nologin的使用者;# grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f13、顯示/etc/passwd檔案中其預設shell為/bin/bash的使用者;進一步:僅顯示上述結果中其ID號最大的使用者;# grep "/bin/bash$" /etc/passwd | sort -t: -k3 -n | tail -1 | cut -d: -f14、找出/etc/passwd檔案中的一位元或兩位元;# grep "\<[0-9][0-9]\?\>" /etc/passwd# grep "\<[0-9]\{1,2\}\>" /etc/passwd5、顯示/boot/grub/grub.conf中以至少一個空白字元開頭的行;# grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf6、顯示/etc/rc.d/rc.sysinit檔案中,以#開頭,後面跟至少一個空白字元,而後又有至少一個非空白字元的行;# grep "^#[[:space:]]\{1,\}[^[:space:]]\{1,\}" /etc/rc.d/rc.sysinit7、找出netstat -tan命令執行結果中以‘LISTEN‘結尾的行;# netstat -tan | grep "LISTEN[[:space:]]*$"8、添加使用者bash, testbash, basher, nologin(SHELL為/sbin/nologin),而找出當前系統上其使用者名稱和預設shell相同的使用者;# grep "^\([[:alnum:]]\{1,\}\):.*\1$" /etc/passwd9、擴充題:建立一個文字檔,假設有如下內容:He like his lover.He love his lover.He like his liker.He love his liker.找出其中最後一個單詞是由此前某單詞加r構成的行。\(l..e\).*\1r
egrep fgrep和grep的區別
egrep和grep的區別