shell编程grep命令和正则表达式

# 一、grep



<font size=6>Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示**全局正则表达式**版本,它的使用权限是所有用户。</font>





<font size=6>**grep命令的基本格式:**</font>

```shell
grep [OPTIONS] PATTERN  [FILE…]
```





<font size=6>**匹配控制选项:**</font>

-e :  使用PATTERN作为模式。这可以用于指定多个搜索模式,或保护以连字符( - )开头的图案。指定字符串做为查找文件内容的样式。   

-f :  指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。

-i :  搜索时候忽略大小写

-v:  反转匹配,选择没有被匹配到的内容。

-w:匹配整词,精确地单词,单词的两边必须是非字符符号(即不能是字母数字或下划线)

-x:仅选择与整行完全匹配的匹配项。精确匹配整行内容(包括行首行尾那些看不到的空格内容都要完全匹配)

-y:此参数的效果和指定“-i”参数相同。





<font size=6>**一般输出控制选项:**</font>

-c: 抑制正常输出;而是为每个输入文件打印匹配线的计数。

--color [= WHEN]:让关键字高亮显示,如--color=auto

-L:列出文件内容不符合指定的范本样式的文件名称

-l : 列出文件内容符合指定的范本样式的文件名称。

-m num:当匹配内容的行数达到num行后,grep停止搜索,并输出停止前搜索到的匹配内容

-o: 只输出匹配的具体字符串,匹配行中其他内容不会输出

-q:安静模式,不会有任何输出内容,查找到匹配内容会返回0,未查找到匹配内容就返回非0

-s:不会输出查找过程中出现的任何错误消息,-q和-s选项因为与其他系统的grep有兼容问题,shell脚本应该避免使用-q和-s,并且应该将标准和错误输出重定向到/dev/null 代替。



## <font size=6>**使用实例**</font>

- <font size=6>1、cat list.txt | grep -v TO                     排除特定的匹配项</font>

![image-20200630164524675](/home/city/.config/Typora/typora-user-images/image-20200630164524675.png)









<font size=6>**shell的正则匹配**</font>

![image-20200630171033527](/home/city/.config/Typora/typora-user-images/image-20200630171033527.png)





- <font size=6>1、grep "^TO" list.txt              匹配以TO开头的一行</font>

![image-20200630165025276](/home/city/.config/Typora/typora-user-images/image-20200630165025276.png)





| 正则表达式 |                     描述                     |                         示例                          |
| :--------: | :------------------------------------------: | :---------------------------------------------------: |
|     \      |  转义符,将特殊字符进行转义,忽略其特殊意义  |     a\.b匹配a.b,但不能匹配ajb,.被转义为特殊意义     |
|     ^      |    匹配行首,awk中,^则是匹配字符串的开始    |                 ^tux匹配以tux开头的行                 |
|     $      |    匹配行尾,awk中,$则是匹配字符串的结尾    |                 tux$匹配以tux结尾的行                 |
|     .      |       匹配除换行符\n之外的任意单个字符       |  ab.匹配abc或bad,不可匹配abcd或abde,只能匹配单字符  |
|     []     |      匹配包含在[字符]之中的任意一个字符      |               coo[kl]可以匹配cook或cool               |
|    [^]     |       匹配[ ^ 字符] 之外的任意一个字符       |    123[ ^45]不可以匹配1234或1235,1236、1237都可以    |
|    [-]     | 匹配[]中指定范围内的任意一个字符,要写成递增 |        [0-9]可以匹配1、2或3等其中任意一个数字         |
|     ?      |            匹配之前的项1次或者0次            |    colou?r可以匹配color或者colour,不能匹配colouur    |
|     +      |           匹配之前的项1次或者多次            |          sa-6+匹配sa-6、sa-666,不能匹配sa-           |
|     *      |           匹配之前的项0次或者多次            |            co*l匹配cl、col、cool、coool等             |
|     ()     |      匹配表达式,创建一个用于匹配的子串      |               ma(tri)?匹配max或maxtrix                |
|    {n}     |     匹配之前的项n次,n是可以为0的正整数      | [0-9]{3}匹配任意一个三位数,可以扩展为[0-9][0-9][0-9] |
|    {n,}    |           之前的项至少需要匹配n次            |         [0-9]{2,}匹配任意一个两位数或更多位数         |
|   {n,m}    |  指定之前的项至少匹配n次,最多匹配m次,n<=m  |   [0-9]{2,5}匹配从两位数到五位数之间的任意一个数字    |
|            |          交替匹配 \| 两边的任意一项          |                ab(c \| d)匹配abc或abd                 |



- <font size=6>1、grep "YOURSELF$”; list.txt                匹配以YOURSELF结尾的一行</font>

![image-20200630165204840](/home/city/.config/Typora/typora-user-images/image-20200630165204840.png)





- <font size=6>2、grep "YOURSELF$”; list.txt                匹配以YOURSELF结尾的一行</font>









<font size=6>1、grep "YOURSELF$”; list.txt                匹配以YOURSELF结尾的一行</font>








上一篇:unpkg +verdaccio+ webpack 联邦实现多版本控制


下一篇:Teach Yourself SQL in 10 Minutes – Page 31 练习