linux 文本过滤-grep
正则表达式
字符匹配:
.:匹配任意单个字符 []:匹配指定范围内的任意单个字符 [^]:匹配指定范围外的任意单个字符
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
*:匹配前面的字符任意次 .*:任意长度的任意字符 \?:匹配前面的字符0或1次,即前面的可有可无(\转义成?) \+:匹配前面的字符至少1次 \{m\}:匹配前面的字符m次 贪婪模式 \{m,n\}:匹配前面的字符至少m次,至多n次 {0,n} {m,}
位置锚定
^:行首锚定,用于模式的最左侧 $:行尾锚定,用于模式的最右侧 ^PATTERN$:用于模式匹配整行 ^$:空行 \<或\b:词首锚定,用于单词模式的左侧 \>或\b:词尾锚定,用于单词模式的右侧 \<PATTERN\>:匹配整个单词
分组符号
\(\):将一个或多个字符捆绑在一起,当做一个整体进行处理 \(xy\)* ps:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3..... \1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符 后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)
grep:文本过滤
- 作用:文本搜索工具,根据用户指定的模式对目标文本逐行进行匹配检查,打印匹配到的行
- 模式:由正则表达式字符及文本字符所编写的过滤条件
- REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字符字面意义,而表示控制或通配的功能
grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...] --color=auto 把匹配到的文本着色显示 -v:显示不能够被pattern匹配到的行 -i:忽略字符大小写 -o:仅显示匹配到字符串本身 -q:静默模式,不输出任何信息 -A #:after,后#行 -B #:before,前#行 -C #:context,前后各#行 -E:使用ERE
示例
显示/proc/meminfo文件中以大小s开头的行(使用两种方式) cat /proc/meminfo | grep "^[Ss]" cat /proc/meminfo | grep -i "^s" grep -i "^s" /proc/meminfo 显示/etc/passwd文件中不以/bin/bash结尾的行 grep -v "/bin/bash$" /etc/passwd 显示/etc/passwd文件中ID号最大用户的用户名 cat /etc/passwd | sort -t: -k 3 -n | tail -1 | cut -d: -f1 如果root用户存在,显示其默认的shell程序 id root &> /dev/null && grep "^root\>" /etc/passwd | cut -d: -f7 找出/etc/passwd中的两位或三位数 grep -o "\<[0-9]\{2,3\}\>" /etc/passwd 显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面存非空白字符的行: grep "^[[:space:]]\+[^[:space:]]" /etc/rc.d/rc.sysinit 找出"netstat -tan"命令的结果以"LISTEN"后跟0,1或多个空白字符结尾的行 netstat -tan | grep "LISTEN[[:space:]]*$"