正则表达式

  • grep:Basic Regular Expression基本正则表达式
  • egrep:Extended grep扩展正则表达式
  • fgrep:Fast grep

    声明:大部分都能在BRE中用,

  1. 通配符.,空行不能跳过
  2. 小数点.转义\.
  3. \w找到0-9数字和a-z或者A-Z字母和_下划线
  4. \W\w的补集,其他的符号都能找到
  5. \d匹配所有数字,同理\D匹配所有不是数字的(补集)
  6. \s匹配所有的空白字符:(空格,制表符,换行符),\S补集
  7. [a-z] [abc]匹配所有出现在[]中的任意一个字符,

    重复匹配

    1.+前面的字符(或范围)重复一次或者多次

    例如[]代表一个字符,只是这个字符有范围.
    [yY]+[oO]+代表yY可以出现多次,且后面跟着oO也可以出现多次

  1. *前面的字符(或范围)可以出现零次或者多次

    例如[yY][oO]+[!~+-\.]*,代表这些标点可以不出现,也可以出现多次

3.?前面出现的字符匹配0个或者1个,理解为?前面的字符是否可能出现

  1. {num1,num2}代表前面的字符(或者范围)重复的次数,
    {num3}指定重复的次数
    {num4,}表示字符至少重复num4

    • \b表示匹配单词的起始或者结尾处所找到的空字符串,
      粗略的理解为要以空白字符结尾,
      yo{1,4}\b,搜索到o出现1-4且换行的字符串
    • ? + *等可以是{}的快捷方式
  2. 提取某段字符串作为参数(分组功能)

    (.+)字符串\n(.+)字符串,括号里面的就是提取出来的参数,按顺序编号
    在使用中就是$1 $2 $...
    文本:dingniispig,nidingisdog
    搜索:(.+)ispig,(.+)isdog
    使用:$1is $2is

  3. ^表示匹配输入字符串的开始位置,$表示匹配输入字符串的结尾位置
    例如:^[0-9a-z-_]{3,15}$:用户注册名

  1. POSIX 方括号表达式(字符集)

构造:
11.1. POSIX字符集:
[:alpha:] 字母字符
[:alnum:]数字字符
[:lower:]小写字符等等

11.2. 排序符号:将字符序列视为一个单位
[.ch.]:匹配于ch
11.3. 等价字符集:[=e=]

三种构造必须用方括号表达式

ls -l /usr/bin | egrep '[[:alpha:]]{1,4}'文件名是基本字母且长度在1-4的文件
ls -l /usr/bin | egrep '[zZ]...$'

  • 方括号表达式中,^放在字首表示的是取反(complement)的意思
    ls -l /usr/bin | egrep 'a[^aeiou]t'即:at中间不出现元音字母
  1. 向后引用(Basic RE,ERE中不存在)

匹配于正则表达式匹配的先前的部分
先将子表达式包围再 \(\)中,
下一步使用\digital匹配于第n个先前括号内子表达式匹配成功的字符

more test.vi | grep '\(ab\)\(cd\)[def]*\2\1'检测文件内容是否匹配成功 abcdfffcdab

more tets.vclaei | grep \(def\)\1 若出现defdef则匹配成功
vim

  1. 单表达式匹配多字符
    more test.vi | egrep '[[:upper:]][[:lower:]]'先匹配一个大写字母,然后匹配一个小写字母
    more test.vi | egrep '[[:upper:]]+[[:lower:]]*'大小写后面接任意重复大小写

  2. grep (BRE)中,锚点(anchor),^是匹配字符串的开始处,$是匹配字符串的结尾处,常用^$来匹配空的字符串或者行列
    gcc -E a.c | grep -v '^$' > a.out 把空行匹配出来然后显示出它之外的,(=删除文本空行)

通配符(匹配文件名)的一些使用:

  1. rm -rf *删除该目录下所有文件(别瞎用)
  2. 在目录下查询文件等
    ls -l [0-2]*
    ls -l ?abc

Bash中一些特殊符号

  1. ''单引号会使得特殊符号失去含义
  2. “”大部分特殊符号失去含义,但
    $\$time$调用变量 echo "$time"
    \,转义字符.
    $(date)引用命令. echo "$(date)"仍有意义
  3. \#shell中的注释
  4. $引用变量的值
  5. \转义字符
  6. $()引用系统命令 time=$(date),赋值给变量,echo $time打印结果.

ERE

  1. 交替:|和管道字符一样,表示将两者隔开,more input | egrep 'abcd|efgh|a|b'

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!