正则表达式
- 通配符
.
,空行不能跳过 - 小数点
.
转义\.
\w
找到0-9
数字和a-z或者A-Z
字母和_
下划线\W
是\w
的补集,其他的符号都能找到\d
匹配所有数字,同理\D
匹配所有不是数字的(补集)\s
匹配所有的空白字符:(空格,制表符,换行符),\S
补集[a-z]
[abc]
匹配所有出现在[]
中的任意一个字符,重复匹配
1.
+
前面的字符(或范围)重复一次或者多次例如
[]
代表一个字符,只是这个字符有范围.[yY]+[oO]+
代表yY
可以出现多次,且后面跟着oO
也可以出现多次
*
前面的字符(或范围)可以出现零次或者多次例如
[yY][oO]+[!~+-\.]*
,代表这些标点可以不出现,也可以出现多次
3.
?
前面出现的字符匹配0个或者1个,理解为?
前面的字符是否可能出现
{num1,num2}
代表前面的字符(或者范围)重复的次数,{num3}
指定重复的次数{num4,}
表示字符至少重复num4
次\b
表示匹配单词的起始或者结尾处所找到的空字符串,
粗略的理解为要以空白字符结尾,
如yo{1,4}\b
,搜索到o
出现1-4
且换行的字符串?
+
*
等可以是{}
的快捷方式
提取某段字符串作为参数(分组功能)
(.+)字符串\n(.+)字符串
,括号里面的就是提取出来的参数,按顺序编号
在使用中就是$1 $2 $...
文本:dingniispig,nidingisdog
搜索:(.+)ispig,(.+)isdog
使用:$1is $2is
^
表示匹配输入字符串的开始位置,$
表示匹配输入字符串的结尾位置
例如:^[0-9a-z-_]{3,15}$
:用户注册名
- 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中间不出现元音字母
- 向后引用(Basic RE,ERE中不存在)
匹配于正则表达式匹配的先前的部分
先将子表达式包围再 \(
与 \)
中,
下一步使用\digital
匹配于第n个先前括号内子表达式匹配成功的字符
more test.vi | grep '\(ab\)\(cd\)[def]*\2\1'
检测文件内容是否匹配成功 abcdfffcdab
more tets.vclaei | grep \(def\)\1
若出现defdef则匹配成功
vim
单表达式匹配多字符
more test.vi | egrep '[[:upper:]][[:lower:]]'
先匹配一个大写字母,然后匹配一个小写字母more test.vi | egrep '[[:upper:]]+[[:lower:]]*'
大小写后面接任意重复大小写在
grep (BRE)
中,锚点(anchor
),^
是匹配字符串的开始处,$
是匹配字符串的结尾处,常用^$
来匹配空的字符串或者行列gcc -E a.c | grep -v '^$' > a.out
把空行匹配出来然后显示出它之外的,(=删除文本空行)
通配符(匹配文件名)的一些使用:
rm -rf *
删除该目录下所有文件(别瞎用)- 在目录下查询文件等
ls -l [0-2]*
ls -l ?abc
Bash中一些特殊符号
''
单引号会使得特殊符号失去含义“”
大部分特殊符号失去含义,但$\$time$
调用变量echo "$time"
\
,转义字符.$(date)
引用命令.echo "$(date)"
仍有意义\#
shell中的注释$
引用变量的值\
转义字符$()
引用系统命令time=$(date)
,赋值给变量,echo $time
打印结果.
ERE
- 交替:
|
和管道字符一样,表示将两者隔开,more input | egrep 'abcd|efgh|a|b'
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!