grep知識及經常使用用法梳理

1. grep語法及其參數說明

  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,同時過濾多個,中間使用 | 分隔            

2. grep命令經常使用用法

######命令參數經常使用用法:  
[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
相關文章
相關標籤/搜索