正则表达式笔记
慢慢记录。因为使用频率的原因,这个东西学了忘忘了学。
基本正则表达式(regular expression)
cp /etc/passwd /home/axe/test(复制模版文件)
cd home/axe/test
1."."表示任意单个字符。
grep :...: passwd #匹配::之间有三个字符的行。
2."*"匹配前一个字符0次或者n次
grep 00* passwd #匹配含有0的行
3.".*"匹配多个字符
4."[]"匹配[]中的任一字符
grep :1[01]*: passwd
5.[x-y]匹配连续的字符串
[0-9],[a-z]
6."^"匹配字串的头
grep ^root passwd
7."$"匹配字串的尾
8."[^n]"匹配否定
9."\{n,\}"匹配前一个字符重复至少n次
"\{n,m\}"匹配前一个字符重复n-m次。
"\{n\}"匹配前一个字符重复n次
grep "o\{2,\}" passwd #(要加引号) 匹配o至少两次
grep "o\{1,2\}" passwd #匹配o1-2次
grep "o\{2\}" passwd #匹配o两次
扩展正则表达式(Extended Regular Expression)
linux常用工具支持扩展正则的有egrep awk等等。
1.{n,m} 等同于基本正则里的\{n,m\},匹配前一个字符n-m次
2.+ 等同于基本正则里的 \{1,\} 匹配前一个字符1次或者多次
3.? 等同于基本正则里的\{0,1\} 匹配前一个字符0次或者1次。
4.| 匹配逻辑或者 eg: egrep "axe|root" passwd
POSIX规范
[:alpha:] 字母字符
[:alnum:] 字母与数字字符
[:cntrl:] 控制字符
[:digit:] 数字字符
[:xdigit:] 16进制
[:punct:] 标点
[:graph:] 非空格字符
[:print:] 任何可以显示的字符
[:space:] 空白
[:blank:] 空格与tab
[:lower:] 小写字符
[:upper:] 大写字符
在linux里POSIX规范可以通过[]引用。举个栗子,grep --color [[:digit:]] passwd
GUN规范
主要是转义元字符
应用实例
匹配一篇文章中所有的单词book
egrep "(^| )[\"[({]*book[\"])}?.,;:'s]*($| )" file
细节:
1.book前可能出现的字符有 "{([ ,ps.此处双引号使用反斜杠转义。
2.book后可能出现的字符有"})].,?:'s
3.在book两边有空格或者行首行尾标志^和$