grep
grep(Globel search Regular Expression and Print out the line)全面搜索正则表达式并把行打印出来,它是一种强大的文本搜索工具,与正则表达式结合使用。
1、格式选项
grep格式:grep [选项] [模式] [文件...],它在一个或多个文件中搜索满足模式的文本行,grep的选项如下:
grep命令模式可以是字符串、变量或正则表达式,grep支持多文件查询如grep pattern a.txt b.txt,grep指定多个文件时可以使用通配如grep pattern ?.txt,查找a.txt、b.txt等单个字符开头的txt文件。
(1)-c选项
输出匹配字符串行的数量,默认grep打印包含模式的所有行,加上-c就只显示包含模式行的数量。如grep -c pattern *.txt。
(2)-n选项
列出所有的匹配行,并显示行号,默认grep搜索单个文件只显示每行内容,搜索多个文件显示文件名及每行内容,加上-n将在内容前附加显示行号(查询中比较有用)。
(3)-v选项
显示不包含模式的所有行,常与-c选项配合显示不包含模式的行数。
(4)-h选项
默认下grep命令查询多个文件时,在匹配行之前显示文件名,加上-h选项,grep将不再显示文件名。
(5)-r选项
默认情况,grep只对当前目录下的文件 进行搜索,而不对子目录中的文件进行搜索。-r表示递归搜索,不仅搜索当前目录而且搜索子目录。比较有用。
(6)-w和-x选项
grep命令支持正则表达式,正则表达式的元字符被解释成特殊的含义,-w选项使元字符不再被解释为特殊含义。例如:grep patt* a.txt,未加-w模式中的*被解析成任意字符,加上-w只搜索包含patt*字符串的文本行。
-x选项是匹配整行,文件中整行内容与模式匹配时才输出,只有部分内容匹配也不输出。
2、grep与正则表达式结合
(1)匹配行首
元字符"^"表示行首,^$表空白行,[^$]表示空白行的范围,前面加上"^"符号取反^[^$]表示非空白行。
(2)匹配重复字符
匹配重复字符通常可以利用"."符号表示一个任意字符和"*"符号表示任意个任意字符来实现,不是正则表达式的规则。
(3)转义符
匹配的目标字符串中包含元字符,需要利用转移符"\"屏蔽其意义,如grep "com\.con" *,句号"."字符是元字符,需要在之前加上转移符进行转义。
横杠(-)字符比较特殊,它虽不属于元字符,但grep命名是由"-"字符引出的特殊字符,因此需要用转移符将其转义。
(4)POSIX字符类
为了保持不同国家的字符编码一致性,POSIX增加了特殊的字符类,grep支持POSIX字符类。
[:upper:]表示大写字母集合,[[:upper:]]表示匹配字符集合,grep ^[[:upper:]] a.txt,搜索以大写字母开头的文本行;grep ^[[:space:]] a.txt,搜索以空格开头的文本行。
(5)精确匹配
\<\>符号用于精确匹配,grep "\<the\>" file,精确匹配the这个单词,未加列出所有包含the字符串的行。grep命令的-w选项也可用于精确匹配。
(6)或字符
或字符"|"是扩展正则表达式中定义的,grep需要加上-E选项才能支持它,不带-E选项,会将"|"字符解析为字面意义。
3、egrep和fgrep
(1)grep命令族:grep(支持基本正则表达式)、egrep(等价grep -E)(扩展grep命令,支持基本和扩展正则表达式)、fgrep(等价grep -F)(快速grep命令,不支持正则表达式,按字符串的字面意思进行匹配)。
(2)egrep "^-+B" a.txt,查找以"-"开头且至少重复一次然后加B字符的字符串,"+"至少重复一次,"*"重复0次或无数次。
(3)grep命令功能十分强大,以代替egrep和fgrep命令。
本文参考 : https://blog.csdn.net/taiyang1987912/article/details/39187525