grepRegex操作命令
在我們進行編輯的時候,我們會用到vim和nano這樣的的全屏編輯器,這樣的編輯器顧名思義會佔據我們的螢幕,來進行編輯。當然,有全屏的編輯器,就有不是全屏的文字編輯器,叫做行編輯器,對於行編輯器來說,有行編輯器三劍客,grep系,sed,awk。
這篇主要就來寫grep系的編輯器的一些操作。
greb系:grep,egrep,fgrep,文本搜尋工具;基於PATTERN(模式)對於給定的文字檔進行模糊搜尋,grep系所有命令預設工作於貪婪搜尋模式;
grep系:
grep:Global search Regular Expression and Print out the line
利用Regex進行全域搜尋並將匹配到的行顯示出來
格式:
grep [options] PATTERN [FILE...]
grep [options] [-e PATTERN | -f FILE] [FILE...]
PATTERN:過濾匹配條件,是由沒有特殊意義的文本字元或者是Regex元字元組成;
root作為PATTERN
[root@localhost ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
Regex的元字元:會被Regex處理引擎解釋為特殊含義的字元;各自都有對應的含義,除非加上\進行轉義,否則會以原來的含義進行轉義解釋。
所有的Regex都是由一般字元加上元字元構成的,
pcre:Regex處理引擎(處理器),用prel語言的Regex引擎(處理器);
Regex元字元:
基本的Regex元字元: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次;
注意:在Regex中,表示任意長度的任一字元:.*
[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...:前向引用
Regex處理引擎的內建變數,\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
擴充的Regex元字元: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次;
注意:在Regex中,表示任意長度的任一字元:.*
位置錨定字元:
行錨定:
行首錨定:^
行尾錨定:$
字錨定:
字首錨定:\<或\b
字尾錨定:\>或\b
分組與前向引用字元:
():將小括弧中包含的內容作為一個不可分割的整體來處理;
\1,\2,\3...:前向引用
Regex處理引擎的內建變數,1表示前面所出現的第一組小括弧中括選的內容,2表示前面所出現的第二組小括弧中括選的內容;...
(string1(string2)):1表示string1,2表示string2;
(string1).*(string2):1表示string1,2表示string2;
或者:
|:將其左右的字元或字串當做整體來對待;
"C|cat" C cat
grep系:
grep:僅支援基本Regex元字元;
egrep:可以支援擴充Regex元字元;
fgrep:不支援任何形式的Regex元字元,將所有的字元當做沒有任何特殊意義的普通文本字元;
常用選項:
-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命令支援擴充Regex元字元;相當於執行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.bkjia.com/Linux/2018-03/151484.htm