当我们需要查找一些文件时,需要使用命令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结尾的单词,并且间隔任意字符后,再次以相同单词结尾的字段的行。