shell基础-05 grep与正则(文件内容查询、正则应用、逻辑否、逻辑和、逻辑或)

前言:
本文仅限于grep的正则应用。
标准正则、扩展正则等见文档 《正则》

1. 简单应用

1.1 语法

grep [选项] “查找内容” 文件1 文件2

返回值:
0,找到。1,没找到。2,找不到指定文件。

1.2 选项

-i :忽略大小写

-n :在每一行前面加上它在文件中的相对行号

-c :显示成功匹配的行数

-s :禁止显示文件不存在或文件不可读的错误信息

-q :静默

-v :只显示不匹配的行

-R-r :递归

--color : 颜色

-o :只显示匹配的内容

-B3 :显示匹配行和前面3行的内容(注意不空格)

-A3 :显示匹配行和后面3行的内容

-C3 :显示匹配行和前后3行的内容

1.3 示例

已有文件及内容如下:

# cd /tmp/test
# cat 1.txt
abc
#cat 2.txt
ABC
#cat 3.txt
123
abc
123
#cat a/a1.txt
abc
  • 列出指定目录下包含abc的文件名
# grep abc /tmp/test/*
/tmp/test/1.txt:abc
/tmp/test/3.txt:abc
grep: /tmp/test/a: 是一个目录
  • 列出指定目录及子目录下包含123的文件名
#  grep -r abc /tmp/test/*
/tmp/test/1.txt:abc
/tmp/test/3.txt:abc
/tmp/test/a/a1.txt:abc
  • 列出abc所在行的序号
# grep -n abc /tmp/test/*
/tmp/test/1.txt:1:abc
/tmp/test/3.txt:2:abc
grep: /tmp/test/a: 是一个目录
  • 列出passwd中root用户及后边3行内容
# grep -A3 ^root --color /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

2. 正则应用

  • grep支持的元字符

^, $, ., *, [], [^], < >,(),{}

  • 扩展元字符

语法:# egrep# grep -E

元字符集: ?, +, { }, |, ( )

注:grep也可以使用扩展集中的元字符,仅需要对这些元字符前置一个反斜线

  • 其他

\w 所有字母与数字

\W 非字符(所有字母与数字之外的字符) ‘love[^a-zA-Z0-9]+’ ‘love\W+’

\b 词边界 ‘\blove\b’ 等同于’<love>'</love>

【示例】列出所有包含数字和字母的文件名

# grep "\w" /tmp/test/*.txt
/tmp/test/1.txt:abc
/tmp/test/2.txt:ABC
/tmp/test/3.txt:123
/tmp/test/3.txt:abc
/tmp/test/3.txt:123

说明:\w必须加引号

3. 逻辑应用

grep 的 and、or、not

3.1 逻辑否(not)

  • 语法
    # grep -v

3.2 逻辑和(and)

  • 两个层grep
# cat 1.txt |grep AAA | grep BBB
  • 用正则匹配

3.3 逻辑或(or)

3.3.1 利用符号|

不推荐,感觉写起来比较乱

  • grep直接执行
# grep '1\|3' 1.txt

说明:引号必须(单双没有区别)、| 必须有、\必须有

  • grep -E 或 egrep
# grep -E '1|3' 1.txt

说明:和前例区别就是不用加反斜杠

3.3.2 grep -e

# grep -e 1 -e 3 1.txt

3.3.3 利用数组

  • 使用数组

不建议,会被打碎为单个字符

# grep "[ac]" *
1.txt:abc
3.txt:abc

说明:
[ ] 里的内容会被认为是一个个分开的字符
里边的符号也被当做字符处理(除 -之外),这一点是和shell数组的区别。

  • 连续区间
# grep "[a-c]" *
1.txt:abc
3.txt:abc

posted on 2021-09-18 14:19  运维开发玄德公  阅读(5)  评论(0编辑  收藏  举报  来源

导航