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>
标签:字符,shell,匹配,正则表达式,image,YOURSELF,内容,grep 来源: https://www.cnblogs.com/-citywall123/p/13215404.html