一、grep
1.用途:文本搜索工具,根据用户指定的文本模式(patten)对目标文件进行逐行搜索,显示能够被模式匹配的行内容。
2.命令使用格式: grep [option] ' PATTEN ’files…
※注意:如果模板包括空格,则必须被引用(双引号或者单引号)。
2.1 常用选项详解
2.1.1 单文件查找:
-n:显示匹配行的行号(为了显示清楚匹配行,下面的都用n+其他选项)
-v :反向匹配(即显示非匹配行) –> 常用于过滤掉一些无关的信息,增加显示信息的可读性。
-o:只显示行中被模式所匹配的字符串,而非整行。
-i:不区分字符的大小写。
-E:支持扩展的正则表达式。(这里暂时不表,到下面说正则表达式的时候一起说)<=> egrep
-F:搜索字符串。即PATTEN部分若使用元字符,也不被理解成正则表达式,而是单纯解析为字符串来做匹配。 <=> fgrep
2.1.2 多文件查找
多文件查找时,如果没有任何选项,在找到匹配行后,默认会显示匹配行对应的文件。
-h:查询多文件时不显示文件名。
-l(艾路):查询多文件时只输出包含匹配字符的文件名。
2.2 文本模式详解(正则表达式)
前面所列的例子中,搜索的文本都是用字符串,当然我们也可以用正则表达式来搜索。
2.2.1 基本正则表达式
?字符匹配
“.”:任意的单个字符
[ ] : 指定范围内的单个字符。如:[a]即查找单个a字符
[^ ]:指定范围外的单个字符。如:[^a]即查找a以外的单个字符
?次数匹配(*):用来与前一个字符的零次或者多次重复出现相匹配。
※这里必须要明白正则里的*和通配符*完全不一样。
“.*":用来匹配任意长度的任意字符。(这个有点类似于通配符*)
?位置锚定
^:锚定行首
$:锚定行尾
^$:匹配空白行
?单词锚定(好像必须加"")
\<String:锚定词首
String\>:锚定词尾
\<String\>:全词匹配
2.2.2 扩展的正则表达式(需要用 –E 选项)
※也可以不使用-E选项,但是各字符前需要加上\
?: 匹配?前面的字符可以出现0次或者1次。不会匹配大于1次的该字符
+:匹配+前面的字符可以出现1次或者多次。不会匹配没有出现的该字符
|: 可以使用多个表达式来匹配 expr1|expr2
{}:与?和+类似,但是这里可以指定匹配次数。
如:{1,2} 匹配1~2次
{3} 只匹配3次
二、egrep
egrep是grep的扩展,可以理解为和grep -E相同。
以下的三种用法都能得到相同的结果。
三、fgrep
为文件搜索文字字符串,即正则表达式中的元字符表示回其自身的字面意义,
不再作为元字符使用。可以理解成和grep -F相同。