2021-05-12 14:32:11
grep正規表示式操作命令
在我們進行編輯的時候,我們會用到vim和nano這樣的的全螢幕編輯器,這樣的編輯器顧名思義會佔據我們的螢幕,來進行編輯。當然,有全螢幕的編輯器,就有不是全螢幕的文字編輯器,叫做行編輯器,對於行編輯器來說,有行編輯器三劍客,grep系,sed,awk。
這篇主要就來寫grep系的編輯器的一些操作。
greb系:grep,egrep,fgrep,文字搜尋工具;基於PATTERN(模式)對於給定的文字檔案進行模糊搜尋,grep系所有命令預設工作於貪婪搜尋模式;
grep系:
grep:Global search Regular Expression and Print out the line
利用正規表示式進行全域性搜尋並將匹配到的行顯示出來
格式:
grep [options] PATTERN [FILE...]
grep [options] [-e PATTERN | -f FILE] [FILE...]
PATTERN:過濾匹配條件,是由沒有特殊意義的文字字元或者是正規表示式元字元組成;
root作為PATTERN
[root@localhost ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
正規表示式的元字元:會被正規表示式處理引擎解釋為特殊含義的字元;各自都有對應的含義,除非加上進行跳脫,否則會以原來的含義進行跳脫解釋。
所有的正規表示式都是由普通字元加上元字元構成的,
pcre:正規表示式處理引擎(處理器),用prel語言的正規表示式引擎(處理器);
正規表示式元字元:
基本的正規表示式元字元:BRE
字元匹配類:
.:可以匹配任意單個字元
[root@localhost ~]# cat /tmp/test/b
aaabbbccc
abcabc
abcdefg
[root@localhost ~]# grep f. /tmp/test/b
abcdefg
[root@localhost ~]# grep .f /tmp/test/b
abcdefg
[]:可以匹配任意指定範圍內的單個字元;
[root@localhost ~]# grep [cd] /tmp/test/b
aaabbbccc
abcabc
abcdefg
[^]:可以匹配任意指定範圍以外的單個字元;
[root@localhost ~]# grep [^d] /tmp/test/b
aaabbbccc
abcabc
abcdefg
下列所有的字元集都可以放置於[]之中用於匹配字元集範圍內的單個字元;
[:lower:]:小寫字母
[:upper:]:大寫字母
[:alpha:]:大小寫字母
[:digit:]:十進位制數位
[:xdigit:]:十六進位制數位
[:alnum:]:所有的十進位制數位加上字母
[:punct:]:所有的標點符號
[:space:]:所有的空白字元
[a-z]:僅表示所有的小寫字母
[A-Z]:僅表示的大寫字母
[0-9]:僅表示所有的十進位制數碼
[root@localhost ~]# cat /tmp/test/b
aaabbbccc
abcabc
abcdefg
s
r
q
12312131231
THIS IS A "TEST"
[root@localhost ~]# grep [[:lower:]] /tmp/test/b
aaabbbccc
abcabc
abcdefg
s
r
q
[root@localhost ~]# grep [[:upper:]] /tmp/test/b
THIS IS A "TEST"
[root@localhost ~]# grep [[:digit:]] /tmp/test/b
12312131231
[root@localhost ~]# grep [[:punct:]] /tmp/test/b
THIS IS A "TEST"
[root@localhost ~]# grep [[:space:]] /tmp/test/b
12312131231
THIS IS A "TEST"
[root@localhost ~]# grep [1-3] /tmp/test/b
12312131231
次數匹配類:該類字元前面的一個字元可以出現的次數:
*:其前面的字元可以出現任意次,即:0次,1次或多次;
?:其前面的字元可有可無,即:0次或1次;
+:其前面的字元至少出現一次;
{m,n}:其前面的字元至少出現m次,最多出現n次;
{m}:其前面的字元必須出現m次;
{m,}:其前面的字元至少出現m次;
{,n}:其前面的字元出現最多不超過n次;
注意:在正規表示式中,表示任意長度的任意字元:.*
[root@localhost ~]# grep "cd*" /tmp/test/b
aaabbbccc
abcabc
abcdefg
[root@localhost ~]# grep "a?b" /tmp/test/b
aaabbbccc
abcabc
abcdefg
[root@localhost ~]# grep "a+b" /tmp/test/b
aaabbbccc
abcabc
abcdefg
[root@localhost ~]# grep "a{1,3}b" /tmp/test/b
aaabbbccc
abcabc
abcdefg
[root@localhost ~]# grep "a{2}b" /tmp/test/b
aaabbbccc
[root@localhost ~]# grep "a{2,}b" /tmp/test/b
aaabbbccc
[root@localhost ~]# grep "a{,2}b" /tmp/test/b
aaabbbccc
abcabc
abcdefg
位置錨定字元:
行錨定:
行首錨定:^
行尾錨定:$
字錨定:
字首錨定:<或b
字尾錨定:>或b
[root@localhost ~]# grep "^a{,2}b" /tmp/test/b
abcabc
abcdefg
[root@localhost ~]# grep "c$" /tmp/test/b
aaabbbccc
abcabc
[root@localhost ~]# grep "<T..S>" /tmp/test/b
THIS IS A "TEST"
分組與前向參照字元:
():將小括號中包含的內容作為一個不可分割的整體來處理;
1,2,3...:前向參照
正規表示式處理引擎的內建變數,1表示前面所出現的第一組小括號中括選的內容,2表示前面所出現的第二組小括號中括選的內容;...
(string1(string2)):1表示string1,2表示string2;
(string1).*(string2):1表示string1,2表示string2;
[root@localhost ~]# grep "(root).*1" /etc/passwd
root:x:0:0:root:/root:/bin/bash
或者:
|:將其左右的字元或字串當做整體來對待;
"C|cat" C cat
[root@localhost ~]# grep "(root).*1" /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# grep "root|ex" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ex:x:1000:1000:ex:/home/ex:/bin/bash
擴充套件的正規表示式元字元:ERE(所有的元字元不用跳脫符號,除了字首錨定和字尾錨定以外,其餘的全部和上邊一樣。)
字元匹配類:
.:可以匹配任意單個字元
[]:可以匹配任意指定範圍內的單個字元;
[^]:可以匹配任意指定範圍以外的單個字元;
下列所有的字元集都可以放置於[]之中用於匹配字元集範圍內的單個字元;
[:lower:]:小寫字母
[:upper:]:大寫字母
[:alpha:]:大小寫字母
[:digit:]:十進位制數位
[:xdigit:]:十六進位制數位
[:alnum:]:所有的十進位制數位加上字母
[:punct:]:所有的標點符號
[:space:]:所有的空白字元
[a-z]:僅表示所有的小寫字母
[A-Z]:僅表示的大寫字母
[0-9]:僅表示所有的十進位制數碼
次數匹配類:該類字元前面的一個字元可以出現的次數:
*:其前面的字元可以出現任意次,即:0次,1次或多次;
?:其前面的字元可有可無,即:0次或1次;
+:其前面的字元至少出現一次;
{m,n}:其前面的字元至少出現m次,最多出現n次;
{m}:其前面???字元必須出現m次;
{m,}:其前面的字元至少出現m次;
{,n}:其前面的字元出現最多不超過n次;
注意:在正規表示式中,表示任意長度的任意字元:.*
位置錨定字元:
行錨定:
行首錨定:^
行尾錨定:$
字錨定:
字首錨定:<或b
字尾錨定:>或b
分組與前向參照字元:
():將小括號中包含的內容作為一個不可分割的整體來處理;
1,2,3...:前向參照
正規表示式處理引擎的內建變數,1表示前面所出現的第一組小括號中括選的內容,2表示前面所出現的第二組小括號中括選的內容;...
(string1(string2)):1表示string1,2表示string2;
(string1).*(string2):1表示string1,2表示string2;
或者:
|:將其左右的字元或字串當做整體來對待;
"C|cat" C cat
grep系:
grep:僅支援基本正規表示式元字元;
egrep:可以支援擴充套件正規表示式元字元;
fgrep:不支援任何形式的正規表示式元字元,將所有的字元當做沒有任何特殊意義的普通文字字元;
常用選項:
-A num:同時顯示被PATTREN匹配到的行及其後續num行;
-B num:同時顯示被PATTREN匹配到的行及其前面num行;
-C num:同時顯示被PATTREN匹配到的行及其前後num行;
--color[=when]:以高亮顏色顯示被匹配到的內容;預設命令就有
[root@localhost ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
-c,--count:不輸出被PATTREN匹配的行的內容,而是輸出被PATTERN匹配到的行數;
-E:可以是grep命令支援擴充套件正規表示式元字元;相當於執行egrep命令
-F:相當於fgrep;
-e:指定多個PATTERN在一個命令列中生效;
-f:將從指定的檔案中讀取多個PATTERN用於一次搜尋;
-i:忽略檔案中字元大小寫
-o:僅顯示被PATTERN匹配到的部分,關閉貪婪模式;
-q:安靜模式;相當於 grep > /dev/null
-v:選擇沒有被PATTERN匹配到的行;
[root@localhost ~]# grep -A 1 "123" /tmp/test/b
12312131231
THIS IS A "TEST"
[root@localhost ~]# grep -B 1 "123" /tmp/test/b
q
12312131231
[root@localhost ~]# grep -C 1 "123" /tmp/test/b
q
12312131231
THIS IS A "TEST"
[root@localhost ~]# grep -c "ab" /tmp/test/b
3
[root@localhost ~]# grep -e "ab" -e "ef" /tmp/test/b
aaabbbccc
abcabc
abcdefg
[root@localhost ~]# grep -i "is" /tmp/test/b
THIS IS A "TEST"
[root@localhost ~]# grep -o "IS" /tmp/test/b
IS
IS
[root@localhost ~]# grep -q "IS" /tmp/test/b
[root@localhost ~]# grep -v "IS" /tmp/test/b
aaabbbccc
abcabc
abcdefg
s
r
q
12312131231
本文永久更新連結地址:https://www.linuxidc.com/Linux/2018-03/151484.htm
相關文章