g r e p一般格式为:
CODE:
[Copy to clipboard]
grep [选项]基本正则表达式[文件]
这里基本正则表达式可为字符串。单引号双引号
在g r e p命令中输入字符串参数时,最好将其用双引号括起来。
在调用模式匹配时,应使用单引号。
例如:“m y s t r i n g”。这样做有两个原因,一是以防被误解为s h e l l命令,二是可以用来查找多个单词组成的字符串。
在调用变量时,也应该使用双引号,诸如: g r e p“$ M Y VA R”文件名,如果不这样,将没有返回结果。
常用的g r e p选项有:
QUOTE:
-c 只输出匹配行的计数。
-i 不区分大小写(只适用于单字符)。
-h 查询多文件时不显示文件名。
-l 查询多文件时只输出包含匹配字符的文件名。
-n 显示匹配行及行号。
-s 不显示不存在或无匹配文本的错误信息。
-v 显示不包含匹配文本的所有行。开始讨论之前,先生成一个文件,插入一段文本,并在每列后加入键,g r e p命令示例中绝大多数将以此为例,其命名为d a t a . . f。生成一个文件,d a t a . f的记录结构如下:
QUOTE:
第1列:城市位置编号。
第2列:月份。
第3列:存储代码及出库年份。
第4列:产品代号。
第5列:产品统一标价。
第6列:标识号。
第7列:合格数量。文件内容如下:
CODE:
[
$ cat data.f
48
483
47
219
484
483
216
1、查询多个文件
在所有文件中查询单词“ sort it”
CODE:
[Copy to clipboard]
$ grep "sort it" *
2、 行匹配
1)显示包含“4 8”字符串的文本:
CODE:
[Copy to clipboard]
$ grep
2)输出匹配行的总数
CODE:
[Copy to clipboard]
$ grep -c "48"data.f
4g r e p返回数字4,表示:包含字符串“4 8”的有4行。
3)行数
显示满足匹配模式的所有行行数:
CODE:
[Copy to clipboard]
$ grep -n "48"data.f行数在输出第一列,后跟包含4 8的每一匹配行。
4)显示非匹配行
显示所有不包含4 8的各行
CODE:
[Copy to clipboard]
$ grep -v "48"data.f
5)精确匹配
可能大家已注意到,在上一例中,抽取字符串“ 4 8”,返回结果包含诸如4 8 4和4 8 3等包含“4 8”的其他字符串,实际上应精确抽取只包含4 8的各行。
使用g r e p抽取精确匹配的一种更有效方式是在抽取字符串后加\ >。假定现在精确抽取4 8,方法如下:
CODE:
[Copy to clipboard]
$grep "48\>" data.f
QUOTE:
另一种方法我试过,好像不行:
注意在每个匹配模式中抽取字符串后有一个键,所以应操作如下:
表示点击t a b键。
$grep "48" data.f
6)大小写敏感
缺省情况下, g r e p是大小写敏感的,如要查询大小写不敏感字符串,必须使用- i开关。在d a t a . f文件中有月份字符S e p t,既有大写也有小写,要取得此字符串大小写不敏感查询,方法如下:
CODE:
[Copy to clipboard]
$grep -i "48" data.f
grep和正则表达式
使用正则表达式使模式匹配加入一些规则,因此可以在抽取信息中加入更多选择。使用正则表达式时最好用单引号括起来,这样可以防止g r e p中使用的专有模式与一些s h e l l命令的特殊方式相混淆。
1、模式范围
抽取代码为4 8 4和4 8 3的城市位置,可以使用[ ]来指定字符串范围。
CODE:
[Copy to clipboard]
$ grep "48[34]" data.f
483
484
483
2、不匹配行首
使行首不是4或8,可以在方括号中使用^记号。
CODE:
[Copy to clipboard]
$ grep "^[^48]" data.f
219
216
如果是字符串48
CODE:
[Copy to clipboard]
$ grep -v "^[^48]" data.f
3、设置大小写
使用- i开关可以屏蔽月份S e p t的大小写敏感
CODE:
[Copy to clipboard]
[sam@chenwy sam]$ grep -i "sept" data.f
483
216
CODE:
[Copy to clipboard]
[sam@chenwy sam]$ grep '[sS]ept' data.f如果要抽取包含S e p t的所有月份,不管其大小写,并且此行包含字符串483,可以使用管道命令,即符号“|”左边命令的输出作为“ |”右边命令的输入。举例如下:
CODE:
[Copy to clipboard]
[sam@chenwy sam]$ grep '[sS]ept' data.f | grep 48
483
4、匹配任意字符
如果抽取以K开头,以D结尾的所有代码,可使用下述方法,因为已知代码长度为5个字符:
CODE:
[Copy to clipboard]
[sam@chenwy sam]$ grep 'K...D' data.f
47
483