04_04_grep及正则表达式

当我们需要查找一些文件时,需要使用命令grep,根据模式搜索文本,并将符合模式的文本显示出来。

用法:grep [选项]  所要查找的模式  文件……

只要模式不涉及变量的使用,单双引号都可以

选项:

-i:不分大小写

--color:对模式加颜色

-v:反向查找,显示没有被模式匹配到的行

-o:只显示被模式匹配到的字符串

正则表达式

正则表达式是由一些不表示自身字母意义的元字符组成

元字符(正常情况下运行在贪婪模式,尽可能长的匹配):

.:表示任意单个字符

文字通配符globbing的字符集合在此也适用,如:grep ‘[[:digit:]]$’/etc/passwd

次数匹配:

*:匹配前面一个字符任意次

.*:匹配任意长度的任意字符,比如:a.*b表示a开头,b结尾中间为任意字符,任意长度的文件,相当于文件查找时的“*”。

\?:匹配前面的字符一次或0次,即前面的模式可有可无。

\{m,n\}:匹配前面的字符至少m次,最多n次。“\”为转义字符,防止字符被shell识别,如a.\{1,3\}b,表示a,b之间至少有一个字符,最多3个。

位置锚定:

^:锚定行首,表示后面的字符必须在行首

$:锚定行尾,表示前面的字符必须出现在行尾

^$:空白行

\<或者\b:锚定词首,其后面的字符必须在单词的首部出现

\>或者\b:锚定词尾,其前面的字符必须在单词尾部

分组:

\(\):向后引用

      \1:引用第一个左括号以及与其对应的右括号之间所包含的内容

      \2:引用第二个左括号以及与其对应的右括号之间所包含的内容

比如:grep ‘\(l..e\).*\1’ /home/test3.txt,表示在文件中找l开头e结尾的单词,并且间隔任意字符后,再次以相同单词结尾的字段的行。

你可能感兴趣的:(04_04_grep及正则表达式)