Linux上文本处理三剑客:
- grep:文本过滤工具
- sed:stream editor,文本编辑工具
- awk:文本报告生成器
grep
-v:显示不能够被pattern匹配到的行 -i:忽略字符大小写 -o:仅显示匹配到的字符串 -A:after,后...行 -B:before,前...行 -C:context,前后各...行 基本正则表达式元字符 字符匹配: . :任意单个字符 []:匹配指定范围内的单个字符 [^]:匹配指定范围外的单个字符 匹配次数: *:匹配前面的字符任意次: 例如:x*y可以匹配到abxy,xay,xxxxxy,但是qwex是不可以的 .*:任意长度的任意字符: \?:匹配其前面的字符0或1次:即前面的可有可无 \+:匹配前面的字符至少1次 \{m\}:匹配前面的字符m次 \{m,n\}:匹配前面的字符至少m次,最多n次 \{0,n\}:匹配前面的字符最多n次 \{m,\}:匹配前面的字符最少m次 位置锚定: ^: 行首锚定:用于模式的最左侧 $: 行尾锚定:用于模式的最右侧 ^PATTERN$:用于模式匹配整行 ^$:空行 ^[[:space:]]*$:匹配空格字符 \<或\b:词首锚定:用于单词模式的最左侧 \>或\b:词尾锚定:用于单词模式的最右侧 \<PATTERN\>:匹配整个单词 分组: \(\):将一个或者多个字符捆绑在一起,当做一个整体进行处理: \(xy\)*\(ab\):匹配xy出现任意次数并且后面跟着ab
练习
1.显示/proc/meminfo文件中以大小s开头的行:(要求使用两种方式) 2.显示/etc/passwd文件中不以/bin/bash结尾的行 3.显示/etc/passwd文件中ID号最大的用户名4.找出/etc/passwd中两位或者三位数 5.找出/etc/passwd文件中,至少以一个空白字符开头的且后面存非空白字符的行
答案
1.grep -i '^s' passwd 2.grep -v "/bin/bash$" passwd 3.sort -t: -k3 -n passwd | tail -1 | cut -d: -f1 4.egrep "[0-9]{2,3}" passwd 5.egrep "^[[:space:]]{1,}[a-z]" passwd