文本过滤工具
- 文本过滤工具分三种:grep、egrep、fgrep。作用为根据条件筛选文件。
- 前两者都支持正则表达式搜索。
- fgrep不支持正则表达式搜索,但是搜索速度快。
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。
- 基本正则表达式 元字符分四类:字符匹配、匹配次数、位置锚定、分组
- 字符匹配(注意与通配符的区别)
- . 匹配单个任意字符(口述,该字符是点)
- [] 匹配指定外围内的任意单个字符
- [^] 匹配指定范围外任意单个字符
- [:alnum:]字母和数字
- [:alpha:]表示任何英文大小写字符
- [:lower:]小写字母
- [:upper:]大写字母
- [:blank:]空白字符(空格和制表符)
- [:space:]水平和垂直的空白字符
- [:cntrl:]不可打印的控制字符
- [:digit:]十进制数字
- [:xdigit:]十六进制数字
- [:gragh:]可打印的非空字符
- [:print:]可打印字符
- [:punct:]标点符号
- 匹配次数,用在需要指定次数的字符后面,指定前面的字符要出现的次数。
- * 匹配前面的字符出现任意次包括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一样的。