linuxsir首页 LinuxSir.Org | Linux、BSD、Solaris、Unix | 开源传万世,因有我参与欢迎您!
网站首页 | 设为首页 | 加入收藏
您所在的位置:主页 > Linux及计算机学科基础理论版 >

grep正则表达式操作命令

时间:2018-03-29  来源:未知  作者:admin666

在我们进行编辑的时候,我们会用到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

linux
友情链接