当我们对linux的接触越来越深,就发现Linux不是想象中的只需要敲命令即可。其中还要对文本进行处理,当然文本处理不是文本编辑,文本编辑有nano,vi,vim,这里做的只是处理,当然“处理”这两个字功能也是很强大的。

   现在进入正题,讲讲文本处理中的文本搜索了。

   文本搜索当然会用到文本搜索工具了,它会根据用户指定的文本模式对目标文件进行搜索,显示能够被模式所匹配到的行。那什么是模式呢,接下来就在grep中看看其使用咯。

   grep的使用格式是:

       grep [options] "mode" file,...“ mode”--> 就是所谓的“模式”了。

           -v :反向匹配,显示不能被模式所匹配到的行。

           -i :搜索时不区分大小写,ignore-case。

           -o :显示被模式匹配到的字符而不是行。

           -E :支持扩展的正则表达式,也就是egrep。

   这里又提到了正则表达式,那什么是正则表示式呢,正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

   说说开始说到的那个“模式”吧。

   “模式”是由①字符,和②字符匹配次数,以及③出现的位置和④词组组成的,当然了,这些都是有其正规的名字的。

   模式匹配中有:

① 字符匹配

                 . : 匹配任意单个字符。

② 次数匹配

                 * :匹配任意次。

                [] : 匹配指定范围内的任意单个字符。

               [^] : 匹配指定范围内的任意单个字符。

                       [[:alpha:]] 匹配所有字母

                       [[:upper:]] 匹配所有大写字母

                       [[:lower:]] 匹配所有小写字母

                       [[:digist:]]匹配所有数字

                       [[:space:]] 匹配空格

                       [[:alnum:]] 匹配字母和数学

                \? : 匹配前面的字符0次或者1次。

             贪婪模式:尽可能长的去匹配字符。

               \{m\}    :匹配前面的字符 m 次。

               \{m,n\}  :匹配前面的字符至少 m 次,至多 n 次。

               \{m,\}   :匹配前面的字符至少 m 次。

               \{0,n\}  :匹配前面的字符至多 n 次。

③ 位置锚定

                ^ : 锚定行首。

                $ : 锚定行尾。

                ^$: 空白行

                \<: 锚定词首,也可以用\b。

                \>: 锚定词尾,也可以用\b。

④ 分组

                 \(\):表示括号内的为一个单词,如:\(abc\),表示abc为单独一个单词。

   还有一个重要的也是很强大的用法,那就是“引用”,什么是引用呢,当你想在你前面匹配到的内容在后面也可以同样的被匹配到,就用到引用了,引用是和分组在一起用的。

引用:

                \1 :后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式所匹配到的内容的。

说了那么多,是该举例子来看看这些匹配方法都该怎么使用了。

       我们就用 /etc/passwd 作为我们的目标文件:

       我们从上而下逐一的举例子:


首先查看下 /etc/passwd 中的文本内容:

   cat /etc/passwd :


wKiom1MKu1SxiCW7AAVegR-YEF0711.jpg

首先,匹配任意字符“.”,任意字符故名思议,就是只要有字符都会被搜索到的哦。如图:


wKioL1MKu8XSO3_NAAUwzB1Yzqo897.jpg




".*"表示匹配任意长度的任意字符。

wKioL1MK0wugrN6cAAVKVWlqycM408.jpg

匹配到非小写字母开头的行。"^"是锚定行首,表示以后面的为行首


wKioL1MK1ALxTG_YAABe1mUjxsc141.jpg

匹配到以"bash"结尾的行。"$"为行尾锚定。

wKioL1MK1ASAgl4rAABlTjCf2RE376.jpg

匹配以"g"为词首的行

wKiom1MK1CqS0OPlAACO3WMAN_M553.jpg

匹配到以"r"开头,中间至少跟至少一个,至多两个"o"。

wKiom1MK1bLBdxFyAABW4S6eTqQ544.jpg

反向引用,自己写的一个文本,用来做反向引用。

wKioL1MK1m3RXCLuAABifpTJ5TI956.jpg

匹配到"'l'和'v'中间夹了任意字符,后面跟任意长度的字符,最后"\1"表示我前面的一样,都是'l'和'v'中间夹了任意字符"

wKiom1MK1mqBHEVmAABLm0zRdZQ031.jpg