grep正则表达式
文本过滤工具
grep
使用格式:grep [OPTIONS] PATTERN [FILE...]。使用举例:
- 不加选项 grep root /etc/passwd
- 加选项 grep -i "s" /etc/passwd
- grep命令选项
- --color=auto,让匹配到的文本有颜色。
- 可以将此操作设置别名。alias grep="grep --color=auto"(centos7上自带此功能,7以前版本可以设置)
- -v,显示没有被PATTERN匹配到的行,取反操作了解一下。(f2.txt内容为“123456”,在同一列。后来又新建了一个分
- 文件,内容也是“123456”,不过是行显示,同样操作结果什么都没有,最后得知v操作是会过滤匹配结果所在行的)
- -i,忽视字符大小写
- grep [sS] /etc/passwd 这里中加中括号表示s或S
- grep -i "s" /etc/passwd 这两个操作结果一样
- -n,显示匹配的行号 (绿色的序号)
- -c,统计匹配的行数
- -o,仅显示匹配到的字符串
- -q,不输出任何信息emmmmm,刚学,还没见识到这货有啥过人之处。
- -A #,显示包括匹配字符所在行在内的后#行。如grep -A 3 huang /etc/passwd
- -B #,前#行,用法同上
- -C #,前后各#行,用法同上
- -e,逻辑或。比如grep -e A -e B /etc/passwd,搜索/etc/passwd下包括A或B的文本
- w,匹配整个单词,有时只搜索root可能匹配到rooter,为了避免这类情况,可以用-w
- -E,支持扩展正则表达式,相当于egrep
- -F,同fgrep。
- 基本正则表达式 元字符分四类:字符匹配、匹配次数、位置锚定、分组
- 字符匹配(注意与通配符的区别)
- 匹配次数,用在需要指定次数的字符后面,指定前面的字符要出现的次数。
- * 匹配前面的字符出现任意次包括0次,不给它加其它限制你就会了解什么叫贪婪模式。比如x*,它可以出现0次“ ”,出现1次x,出现2次xx......
- .*(点和星号),表示任意字符
- \?,出现0次或1次,通俗理解为有或没有
- \+ ,出现至少一次,通俗理解为有
- \{n\} ,出现n次,x\{2\},xx
- \{m,n\},出现m到n次
- \{,n\},出现次数不超过n次
- \{n,\},出现n次以上
- 位置锚定,定位字符出现的位置
- ^,行首锚定,用在PATTERN的最左侧。用来匹配出现在行首的目标字符
- $,行尾锚定,用于PATTERN的最右侧
- ^PATTERN$,匹配PATTERN所在行的整行
- ^$,相当于空行
- ^[[:space:]]*$,相当于空白行
- \<,词首锚定,用于PATTERN的左侧,限定匹配字符的左侧格式
- \>,词尾锚定,用在PATTERN右侧
- \<PATTERN>,匹配整个单词
- 分组
- \(\) 将一个或多个字符捆绑在一起,当作一个整体进行处理,如:
\(root\)\+表示匹配root至少出现一次,有root出现,这里就是把root当成了一个整体
- \1,\2,\3,分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这
些变量的命名方式为: \1, \2, \3, ...
- 举例:\(string1\+\(string2\)*\)
- \1:string1\+\(string2\)*
- \2:string2
- 后向引用(首先嘚分组):引用前面分组括号中的模式所匹配的字符,而非模式本身。用处是把前面出现的字符再次出现的时候用\+数字来表示。下图表示匹配前面出现了一次root后面又出现了一次root,前面出现一次wang后面又出现一次wang,这里在用正则表达式的时候就可以把第一次出现的完整表示,再次出现用\数字代替。不同字符用不同数字。
- 或关系:\|
- a\|b,a或b
- \(a\|b)c,ac或bc0
- \(\) 将一个或多个字符捆绑在一起,当作一个整体进行处理,如:
egrep扩展正则表达式
- 首先使用扩展正则表达式可以表现为egrep,也可以是grep -E
- 格式:egrep [OPTIONS] PATTERN [FILE...]
- 扩展正则表达式的元字符也是4种:字符匹配、次数匹配、位置锚定、分组
- 与grep的正则表达式相比,egrep的扩展表达式简便了不少,不正式的说基本上只要把grep里出现的\去掉就行,除了位置锚定里的词首跟词尾锚定,这两个是跟grep一样的。
相关阅读
原文链接:http://caibaojian.com/zhongwen-regexp.html这篇文章主要讲如何使用正则匹配中文字符,中文正则表达式的匹配规则不像其他
身份证号码验证 1.第一代身份证15位: /^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}$/ 例: if (sf
JavaScript正则表达式在线测试工具:http://tools.jb51.net/regex/javascript正则表达式在线生成工具:http://tools.jb51.net/regex/
Java正则表达式--关于在线测试能够通过但是Java中无法
问题抛出 在问题4的Problem1中的getMentionedUsers函数。其中需要去匹配@和后面的合法的用户名。从而获得某个人@了哪些用户。并
常用的正则表达式:(1) "^\d+$"//非负整数(正整数 + 0)(2) "^[0-9]*[1-9][0-9]*$"//正整数(3) "^((-\d+)|(0+))$"//非