简介
grep:Global search regular expression and print out the line.
grep是一种文本搜索处理工具,根据用户指定的文本模式或搜索条件对目标文件进行逐行搜索,并显示能匹配到的行。
语法格式:grep [options]… 'PATTERN' FILE…
'':弱引用,
"":强引用,如PATTERN中有变量则需要强引用
PATTERN:模式匹配,可以使用正则表达式
正则表达式:是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能
分类:
基本正则表达式:grep
扩展正则表达式:egrep,grep -E
不使用正则表达式:fgrep,即用户搜索条件或文本模式表示其字面意义
1、字符匹配
.:匹配任意单个字符,包括空字符 *:任意长度,它前面的字符可以出现任意次 .*:字符组合,表示任意长度的任意字符 a|b:多条件匹配,a或者b #扩展正则表达式可用 []:匹配指定范围内的任意单个字符 [0-9],[[:digit:]] #表示任意数字 [a-z],[[:lower:]] #表示任意小写字母 [A-Z],[[:upper:]] #表示任意大写字母 [[:space:]] #表示空格 [[:punct:]] #表示特殊符号 [a-zA-Z],[[:alpha:]] #表示任意字母 [0-9a-zA-Z],[[:alnum:]] #表示任意字母和数字 [[:blank:]] #匹配一个空格或制表符(TAB) [[:graph:]] #非空字符 [[:cntrl:]] #控制字符 [[:xdigit:]] #十六进制数字 [^] #条件取反
2、次数匹配元字符
#"\"符号为转义符,扩展正则表达式不需要转义 \?:0次或1次,它前面的字符是可有可无的 #转义前 ? \{m\}:精确匹配m次,它前面的字符要出现m次 #转义前{m} \{m,n\}:至少m次,至多n次 #转义前{m,n} \{m,\}:至少m次 #转义前{m,} \+:至少1次 #转义前 + \{0,n\}:至多n次 #转义前{0,n}
3、位置锚定
^:行首锚定,写在模式最左侧 $:行尾锚定,写在模式最右侧 ^$:空白行 \<:词首,写在字符左侧 \>:词尾,写在字符右侧 \<char\>:锚定字符串 \b:字符串锚定,不区分词首词尾
4、分组和引用
\(\):分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用。 ():扩展正则表达式不需要转义,直接使用()即可 引用:\(ab\).*\1,即引用前一个括号匹配到的内容 格式:\(char\)\#,\#表示引用前面第#个括号匹配的内容
5、命令选项
-v:反向选取 -o:仅显示匹配的字串,而非字串所在的行 -i:igonore-case,忽略字符大小写 -E:支持使用扩展正则表达式 --color:匹配字串显示颜色,颜色可在本地变量中定义 vim ~/.bashrc export GREP_OPTIONS='--color={never|always|auto}' GREP_COLOR=a;b' 默认选项为never,而always在任何情况下都会有颜色标记,auto在终端输出时才加颜色 #a可以选择[0-8] 0 关闭所有属性 1 设置高亮度 4 下划线 5 闪烁 7 反显 8 消隐 #b可以选择:[30-37] 30 black 31 red 32 green 33 yellow 34 blue 35 purple 36 cyan 37 white 30 — 37 设置前景色 -m #:仅显示匹配行的前#行 -n:在匹配行前打印行号 -c:仅显示匹配行计数 -w:仅显示匹配单词的行 -f:从文件读取模式,一行一个模式匹配 -A #:显示上下文,#表示数字,显示下面#行 -B #:显示上面#行 -C #:显示上下#行
6、例子
1)找出/etc/passwd文件中的一位数或两位数; # grep -E '\<[0-9]{1,2}\>' /etc/passwd 扩展正则 # grep "\<[0-9]\{1,2\}\>" /etc/passwd 基本正则 2)显示/boot/grub/grub.conf中以至少一个空白字符开头的行; # grep -E '^[[:space:]]{1,}' /boot/grub/grub.conf # grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf 3)找出/etc/rc.d/init.d/functions文件中某单词后跟一组小括号“()”行; # grep -o -E "\<[[:alnum:]]+\>\(\)" /etc/rc.d/init.d/functions 4)显示当前系统上root、fedora或user1用户的默认shell; # grep -E "^(root|fedora|user1):" /etc/passwd | cut -d: -f7 5)统计/etc/passwd包含root的行数 # grep -w -c 'root' /etc/passwd 6)输出/etc/issue文件的空行行号 # grep -n "^$" /etc/issue
原创文章,作者:秦,如若转载,请注明出处:http://www.178linux.com/4150