grep命令语法
grep命令使用一个选项、一个要匹配的模式和要搜索的文件,它的语法如下所示:
grep [options] PATTERN [FILES]
如果没有提供文件名,则grep命令将搜索标准输入。
-
options
选项 含义 -c 输出匹配行的数目,而不是输出匹配的行 -E 启用扩展表达式 -h 取消每个输出行的普通前缀,即匹配查询模式的文件名 -i 忽略大小写 -l 只列出包含匹配行的文件名,而不输出真正的匹配行 -v 对匹配模式取反,即搜索不匹配行而不是匹配行
-
PATTERN
匹配模式采用正则表达式。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式的特点是:
1. 灵活性、逻辑性和功能性非常的强;
2. 可以迅速地用极简单的方式达到字符串的复杂控制。
3. 对于刚接触的人来说,比较晦涩难懂。
由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用。
在正则表达式的使用过程中,一些字符是以特定方式处理的。grep命令支持且最常用的特殊字符如下表所示:
字符含义 ^ 指向一行的开头 $ 指向一行的结尾 . 任意单个字符 [ ] 方括号内包含一个字符范围,其中任何一个字符都可以被匹配,例如字符范围a~e,或在字符范围前面加上^符号表示使用反向字符范围,即不匹配指定范围的内的字符。
如果想将上述字符用作普通字符,就需要在它们前面加上\字符。例如,如果想使用$字符,需要将它写为 \$ 。
在方括号中还可以使用一些有用的特殊匹配模式。如下表所示:
匹配模式 含义 [:alnum:] 字母与数字字符 [:alpha:] 字母 [:ascii:] ASCII字符 [:blank:] 空格或制表符 [:cntrl:] ASCII控制字符 [:digit:] 数字 [:graph:] 非控制、非空格字符 [:lower:] 小写字母 [:print:] 可打印字符 [:punct:] 标点符号字符 [:space:] 空白字符,包括垂直制表字符 [:upper:] 大写字母 [:xdigit:] 十六进制数字
另外,如果指定了用于扩展匹配的-E选项,那些用于控制匹配完成的其他字符可能会遵循正则表达式的规则,如下表所示:
选项 含义 ? 匹配是可选的,但最多匹配一次 * 必须匹配0次或多次 + 必须匹配1次或多次 {n} 必须匹配n次 {n, } 必须匹配n次或者n次以上 {n,m} 匹配次数在n到m之间,包括n和m
对于shell中的grep命令来说,需要在这些字符之前加上 \ 字符。
grep命令示例
-
第一个例子是查找以字母e结尾的行。
<span style="font-size:12px;">grep e$ words.txt</span>
-
查找以字母a结尾的单词。
<span style="font-size:12px;">grep a[[:blank:]] words2.txt</span>
-
查找以Th开头的由3个字母组成的单词。
<span style="font-size:12px;">grep Th.[[:space:]] words2.txt</span>