grep是文本搜索工具,能根據用戶指定的'PATTERN模式'目標文本進行逐行匹配檢查,注意grep默認會以 行 爲單位打印匹配到的行.正則表達式
如下是grep命令的語法及經常使用參數:ssh
grep [OPTIONS] PATTERN [FILE...] 選項 模式 文件 ###參數及含義 --color=auto #<==匹配成功顯示顏色 -v #<==排除 -i #<==忽略大小寫 -n #<==顯示匹配行及其行號 -o #<==僅顯示匹配到的字符串 -w #<==只匹配過濾的單詞 -q #<==靜默參數,不輸入任何信息 -A #<==after,後n行 -B #<==before,前n行 -C #<==先後各n行 -E #<== 至關於egrep,同時過濾多個,中間使用 | 分隔
######命令參數經常使用用法: [root@test ~]# cat a.txt sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin [root@test ~]# grep -n 'ntp' a.txt #<==顯示字符串所在行及其行號 3:ntp:x:38:38::/etc/ntp:/sbin/nologin [root@test ~]# grep -v '^ntp' a.txt #<==排除用法,將以ntp開頭的行排除後打印輸出 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin [root@test ~]# grep -i 'Privilege' a.txt #<==忽略大小寫,輸出字符串匹配到的行 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin [root@test ~]# grep -o 'Privilege' a.txt #<==僅僅顯示匹配到的字符串 Privilege [root@test ~]# grep -w 'Privilege' a.txt #<==不多用,匹配單詞,但有時用於腳本中匹配指定的用戶 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin [root@test ~]# seq 10 >a.txt [root@test ~]# grep -E "1|2" a.txt #同時過濾多個字符串所在的行 [root@test ~]# grep -A 3 '5' a.txt #<==顯示字符串5及後面3行 5 6 7 8 [root@test ~]# grep -B 3 '5' a.txt #<==顯示字符串'5'及以前3行 2 3 4 5 [root@test ~]# grep -C 3 '5' a.txt #<==顯示字符串'5'及先後3行 2 3 4 5 6 7 8 ######配合正則表達式經常使用用法(注意:使用egrep就無需 \ 反斜線轉義,grep使用正則須要 \ 轉義) [root@test ~]# cat a.txt abxy xay xxxxxxxxy x [root@test ~]# grep 'x*?y' a.txt #<==注意,這裏不會匹配到任何內容,此時?表明單個字符 [root@test ~]# grep 'x*y' a.txt #<==貪婪模式(最長匹配原則)匹配 abxy xay xxxxxxxxy [root@test ~]# grep 'x*\?y' a.txt #<==此時問號是正則,表明匹配前面字符0次或1次 abxy xay xxxxxxxxy [root@test ~]# grep 'a.*y' a.txt #<==.*表明任意內容 abxy xay [root@test ~]# grep 'x\?y' a.txt abxy xay xxxxxxxxy [root@test ~]# grep 'x\+y' a.txt #<==+號匹配前面字符x至少1次 abxy xxxxxxxxy #####匹配次數 [root@test ~]# tail -5 /etc/passwd >a.txt [root@test ~]# cat a.txt tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin abrt:x:173:173::/etc/abrt:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin [root@test ~]# grep -o '[a-z]\{3\}t' a.txt #<==匹配文本中,t字符串的前面有3個隨意小寫字母的字符串 ount abrt abrt arat empt post post [root@test ~]# grep -o '[a-z]\{3,5\}t' a.txt #<==匹配,t字符串的前面有3-5個小寫字母的字符串 [root@test ~]# grep -o '[a-z]\{,5\}t' a.txt #<==匹配,t字符串的前面有至多5個小寫字母的字符串 [root@test ~]# grep -o '[a-z]\{3,\}t' a.txt #<==匹配,t字符串的前面有至少3個小寫字母的字符串 #####位置錨定 [root@test ~]# cat a.txt tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin abrt:x:173:173::/etc/abrt:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin [root@test ~]# grep -o '\<[a-z]\{3\}t' a.txt #<==必須出現單詞首部 abrt abrt empt post post [root@test ~]# grep -o '\<[a-z]\{3\}t\>' a.txt #<==錨定 單詞尾部 abrt abrt [root@test ~]# ifconfig eth0|sed -n '2p'|grep -o '\<10.0.0.30\>' #<==grep功能不擅長過濾此種內容 10.0.0.30 ######生產經常使用於去除空行和以#號開頭的行 [root@test ~]# grep -Ev "^$|^#" /etc/yum.repos.d/CentOS-Base.repo