1 作用
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
2 格式
grep [options] PATTERN [FILE...]
[1]grep 搜索字符串 [filename]
[2]grep 正则表达式 [filename]
在文件中搜索所有PATTERN出现的位置,PATTERN既可以是要搜索的字符串,也可以是一个正则表达式。
注意:在输入要搜索的字符串时最好使用双引号;而在模式匹配使用正则表达式时使用单引号。
2.1 options选项参数
-a 不要忽略二进制数据。 -A <显示行数> 除了显示符合范本样式的那一行之外,并显示该行之后指定个数的行。 -B <显示行数> 除了显示符合范本样式的那一行之外,并显示该行之前指定个数的行。 -C <显示行数> 除了显示符合范本样式的那一行之外,并显示前后指定的行。 -c 输出匹配行的行数。 -d <进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数 -e <范本样式> 指定字符串作为查找文件内容的范本样式。 -E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。 -f <范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。 -F 将范本样式视为固定字符串的列表。 -G 将范本样式视为普通的表示法来使用。 -h 查询多文件时不显示文件名。 -H 查询多文件时显示文件名。 -i 忽略字符大小写的差别。 -I 不区分大小写 -l 查询多文件时只列出匹配的文件名。 -L 查询多文件时列出不匹配的文件名。 -n 显示匹配行及行号。 -q 不显示任何信息。 -r 此参数的效果和指定“-d recurse”参数相同。 -s 不显示不存在或无匹配文本的错误信息。 -v 显示不包含匹配文本的所有行。 -w 只显示全字符合的行。即匹配整个单词 -x 只显示全列符合的行。 -y 此参数效果跟“-i”相同。 -o 只输出文件中匹配到的部分 --color=auto 标记匹配颜色 |
2.2 pattern模式:正则表达式参数
\ 忽略正则表达式中特殊字符的原有含义。 |
3 示例
[1] 在多个文件中搜索
grep “string” file1 file2 file3 ...
[2] 标记匹配颜色
grep “string” filename --color=auto
[3] 只列出文件中匹配到的那部分
echo “this is a test line.” | grep -o -E ‘[a-z]+\.’ #结果: line.
[4] 打印样式匹配所位于的字符或字节的偏移
echo gun is not unix | grep -b -o “not” #结果: 7:not
说明:一行中字符串的字符便宜是从该行的第一个字符开始计算,起始值为0。选项 -b -o 一般总是配合使用。
[5] 制动多个匹配样式
$echo this is a text line | grep -e "this" -e "line" -o #结果如下:
this
line
#或:也可以使用-f选项来匹配多个样式,在样式文件中逐行写出需要匹配的字符。
$cat patfile
aaa
bbb
$echo aaa bbb ccc ddd eee | grep -f patfile -o
#或:使用扩展模式匹配
$echo this is a test line | grep -E “this|line” -o