[ 正则元字符: ]
grep可以结合正则表达式使用, 下面介绍一些常用的正则表达式过滤字符的用法。
1. ^表示行开头
grep ‘^bbb‘ aaa.txt --color
# 从文件aaa.txt中查找以bbb开头的行。
2. $表示行结尾
grep ‘bbb$‘ aaa.txt --color
# 从文件aaa.txt中查找以bbb结尾的行。
3. .表示单个字符, 它可以匹配除换行符之外的所有字符。
grep ‘bbb...‘ aaa.txt --color
# 从文件aaa.txt中查找bbb后面含有三个字符的行, ‘点‘可以匹配空格。
4. * 表示它前面的那个字符可以出现任意次
grep ‘bbb.*‘ aaa.txt --color
# 从文件aaa.txt中查找bbb后面有任意个字符的行。
5. + 表示它前面的那个字符至少要出现一次
grep -E ‘bbb.+‘ aaa.txt --color # 从文件aaa.txt中查找bbb后面至少会出现一个字符的行。
6. ? 表示它前面的那个字符可以有也可以没有
grep -E ‘bbbc?‘ aaa.txt --color # 从文件aaa.txt中查找存在bbb或bbbc的行。
注意: grep不支持 + 、? 这两个元字符, 如果想使用, 只能使用扩展的grep (egrep 或 grep -E)
7. [ ] 表示匹配一个字符, 出现在[ ]里面的字符都是或的关系
grep ‘^[Bb]bb‘ aaa.txt --color # 从文件aaa.txt中查找以Bbb或bbb开头的行。
grep
‘[0-9]‘ aaa.txt --color # 从文件aaa.txt中查找含有数字的行
grep -P ‘\d‘ aaa.txt --color # 从文件aaa.txt中查找含有数字的行, -P表示使用perl的正则表达式
\d表示数字, \D表示非数字
\s表示空格或tab, \S表示不是空格或tab
\w表示任意字符(大小写字母、数字、下划线), \W表示不是字母、数字、下划线。
注意: ^ 出现在 [ ] 外面的话表示‘开头‘, 如果出现在 [ ] 里面的话表示‘否定‘
grep ‘^[^Bb]..‘ aaa.txt --color # 从文件aaa.txt中查找不是以B或b开头,
而且后面还有两个字符的行。
8. \< 匹配单词的开头
grep ‘\<Tom‘ aaa.txt --color # 从文件aaa.txt中查找单词以Tom开头的行。
9. \> 匹配单词的开头
grep ‘\>Tom‘ aaa.txt --color # 从文件aaa.txt中查找单词以Tom结尾的行。
10. 匹配某个单词, 而不是某个字符串的一部分
grep ‘\bTom\b‘ aaa.txt --color # 从文件aaa.txt中查找含有单词Tom的行, 如果是aTomb之类的忽略掉。
11. 用\(\)做标签, 后面想引用就用\n (n是一个数字), \1表示第一个被引起来的
grep ‘\(tom\)...\1‘ aaa.txt --color # 从文件aaa.txt中查找tom, 且它的后面有三个字符, 然后还有一个tom的行. 如: tomxxxtom
12. \{n\} 表示前面的字符要出现n次
grep ‘tomx\{3\}‘ aaa.txt --color # 从文件aaa.txt中查找tomx, x要出现3次, 如: tomxxx