正则表达式:是一类字符所书写出的模式(pattern)
学习正则表达更主要的就是学习对元字符的使用
元字符:类似统配符,不表示字符本身的意义,用于额外功能性的描述
表示必须用单双引号概括起来,如果需要使用变量,必须用双引号括起来,否则可以不加区分的使用单双引号
正则表达式分为:基本正则表达式和扩展正则表达式
基本正则表达式的元字符:grep -E
- 只要包含元字符则必须使用引号括起来单双引号都可以根据是否有变量决定
字符匹配:
- .:任意单个字符
- []:指定范围内的任意单个字符
- [0-9],[[:digit:]]
- [a-z],[[:lower:]]
- [A-Z],[[:upper:]]
- 所有的字母:[[:alpha:]]
- 字母+数字:[[:alnum:]]
- 空格:[[:space:]]
- 标点符号:[[:putct:]]
- [^]: 指定范围外的任意单个字符
- .:任意单个字符
次数匹配:用来指定匹配其前面的字符的次数
- *:任意次
- 例=:x*y xxy xy y :y前面出现任意次数的x都可以被匹配到,
- 例=:x*y xxy xy y :y前面出现任意次数的x都可以被匹配到,
补充:
匹配任意长度的任意字符:.*
前面字符出现0次或者1次的:\?
指定次数,匹配m次:{m}
指定次数范围,至少m次,至多n次: {m,n}
也可以至少m次: {m,}
至多n次: {0,n}
做变量换算需要使用”“- *:任意次
//例以S开头X结尾中间为任意长度的任意字符 grep '[Ss].*[Xx]' /tmp/ha.sh
在匹配的过程中采用的贪婪模式:尽可能的长的去匹配符合规则字符:
- 位置锚定:用于指定字符出现的位置
- ^:锚定行首 格式:^字符串
//例:以S开头并且为行首,X结尾中间为任意长度的任意字符 # grep '^[Ss].*[Xx]' /tmp/ha.sh
- $:锚定行尾
- 字符串$
//例:以S开头并且为行首,X结尾中间为任意长度的任意字符 # grep '[Ss].*[Xx]$' /tmp/ha.sh
- ^$:空白行
- 单词的位置锚定
//例:统计空格的数量 # grep '^$' /tmp/ha.sh |wc -l //因为空格不显示,所以统计数字
- 锚定词首
- \< 字符串 :锚定词首:可以用\b代替放入词首
- 锚定词首
- 字符串> : 锚定词尾:可以用\b代替放入词尾
//锚定单词 # grep '\<hello\>' /tmp/ha.sh //准确一个找到hello这个词 # grep '\<h..o\>' /tmp/ha.sh //准确一个找到h开头o结尾的这个词中间任意两个字符
- 分组:
// \(\):反斜线这里是转意字符 // \(ab\)*xy //因为*只能匹配前面一次字符的任意次,通过分组的方式可以将ab作为一个整体予以匹配前面任何次数的ab组合 # grep '\(ab\)*xy' /tmp/ha.sh //ab为一个整数
- 引用:
\1:后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式匹配到的内容,意思是说前面出现一次,在\1这也要出现一次
\2。。。
//命令:grep '\(l..e\).*\1r' grep.txt //结果:⬇️ 匹配到love对应lover,like对应liker He love his lover. She like her liker.
复制别处笔记
基本正则表达式和扩展正则表达式 基本正则表达式的元字符: .:任意单个字符 []:指定范围内的任意单个字符 [0-9],[[:digit:]] [a-z],[[:lower:]] [A-Z],[[:upper:]] 所有的字母:[[:alpha:]] 字母+数字:[[:alnum:]] 空格:[[:space:]] 标点符号:[[:putct:]] [^]: 指定范围外的任意单个字符 次数匹配:用来指定匹配其前面的字符的次数 *:任意次 例子:x*y xxy xy y 都能匹配 .*:匹配任意长度的任意字符 \?:前面字符出现0次或者1次的 \{m\}:匹配m次 \{m,n\}:至少m次,至多n次 \{m,\}:至少m次 \{0,n}:至多n次 做变量换算需要使用”“ 贪婪模式:尽可能的长的去匹配字符: 位置锚定:用于指定字符出现的位置 ^:锚定行首 ^Char $:锚定行尾 grepchar$ ^$:空白行 单词的位置锚定 \<char :锚定词首,\b char\> : 锚定词尾,char\b 分组: \(\) \(ab\)*xy 引用: \1:后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式匹配到的内容,意思是说前面出现一次,在\1这也要出现一次 |:或者 ab|Dc :ab或者Dc,如果需要或一个字母需要a(b|D)c ------------------------------------------------------------------------------- 基本: 字符匹配:.,[][^] 次数匹配:*,\?,\{m\},\{m,n\} 位置锚定:\<,\b,\>,^,$ 分组:\(\) 前向引用:\1,\2 扩展: 字符匹配:.,[][^] 次数匹配:*,?,{m},{m,n},+ // 不需要转译了,添加+ 位置锚定:\<,\b,\>,^,$ 分组:() // 不需要转译了 前向引用:\1,\2 或a|b //添加了或,|两边是用整个字符串兑换,如果限定的要用括号括起来 》 a(b|c)d
- 位置锚定:用于指定字符出现的位置