首頁 > 軟體

grep正規表示式操作命令

2020-06-16 16:53:23

在我們進行編輯的時候,我們會用到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


IT145.com E-mail:sddin#qq.com