grepRegex操作命令

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.