grep常用方法
- grep常用参数
- grep匹配多个关键字
- 高亮
- ‘字符串’
- 1.1完全匹配字符串-x
- 2.反向匹配grep -v ‘字符串’
- 不包括`grep`本身
- 3、 grep -E 同时匹配多个关键字–`或`关系
- grep过滤空白行和注释行
- 4、 同时匹配多个关键字–`且`关系
- 5、显示前几行和后几行
- 6. 只过滤文件名
- 7. 过滤还有特殊字符的字符串
- 通配符(匹配文件名)
- 常用正则表达式(匹配文件内容)
- grep常用语法
grep常用参数
学习资料:https://blog./oldboy/5430941
/grep
/linux-command/c/
参数 | 释义 |
---|---|
-i | 不区分大小写 |
-v | 结果取反(匹配 指定的字符串以外 的内容) |
-A | (以后的行)after |
-B | (以前的行)before |
-C | 匹配的前后几行 |
-n | 显示行号 |
-E | 正则表达式 |
-b | 显示匹配行距文件头部的偏移量 |
-c | 只显示匹配的行数 |
-F | 匹配固定字符串的内容 |
-h | 搜索多文件时不显示文件名 |
-l | 只显示符合匹配条件的文件名 |
-o | 显示匹配词距文件头部的偏移量 |
-q | 静默执行模式 |
-r | 递归搜索模式 |
-s | 不显示没有匹配文本的错误信息 |
-v | 显示不包含匹配文本的所有行 |
-w | 精准匹配整词 |
-x | 精准匹配整行 |
–color | 指定颜色,默认值是–color=auto |
grep匹配多个关键字
grep
命令非常常用,经常用于匹配文本字符。
一般情况下,grep 命令只能匹配一个关键字,怎么实现匹配多个关键字呢?
下面看几种情况:
# 示例:查看rhel系统的版本
## -s 不显示错误信息
## -h 不标示该列所属的文件名称
## -o 只输出文件中匹配到的部分
## -E 使用正则表达式
grep -shoE '[0-9]+' /etc/almalinux-release /etc/rocky-release /etc/centos-release | head -1
高亮
参考: /akaks0/article/details/72902390
# grep高亮
## -E 正则表达式
## --color 指定颜色,默认值是--color=auto
grep -E "word1|word2|word3" --color
‘字符串’
这是最普通的使用方式:
grep 关键字 文件名
# 匹配文件中包含 MANPATH 的那一行:
cat | grep 'MANPATH'`
# 匹配关键字及下面的一行
## -A1 匹配下面1行
greo eht1 -A1 filename
# 模糊匹配
grep "abc" # 结果为abcd, abcde, abc等
# -w 精确匹配/全匹配
grep -w "abc" # 结果为abc
1.1完全匹配字符串-x
# -x 完全匹配字符串
ls /usr/bin/ | grep -x wg
2.反向匹配grep -v ‘字符串’
与上例子相反
,反向匹配
# 匹配文件中不包含 MANPATH 的那一行:
## -v 取反
cat | grep -v 'MANPATH'`
不包括grep
本身
不包含grep
本身
# -v参数含义为不包括(取反)
ps aux | grep -v "grep" | grep defunct
3、 grep -E 同时匹配多个关键字–或
关系
grep -E 是使用扩展正则表达式
也就是egrep命令
# 匹配 中包含 word1 或 word2 或 word3 的行。
## 满足其中任意条件(word1、word2和word3之一)就会匹配。
## -E 使用正确表达式
## |正则表达式中的 或
grep -E "word1|word2|word3"
grep过滤空白行和注释行
# -E使用正则表达式
# -v 取反
## ^# 以#号开头
## ^$ 以空开头,以空结尾(空白行)
grep -Ev '^#|^$' filename
4、 同时匹配多个关键字–且
关系
使用管道符连接多个 grep ,间接实现多个关键字的与关系匹配:
# 必须同时满足三个条件(word1、word2和word3)才匹配
grep word1 | grep word2 |grep word3
5、显示前几行和后几行
# 查看匹配的关键字前后几行
## -C3 匹配前后3行
grep -C3 "abc" # 结果为abc的
## -A 10 显示匹配到的后10行
grep -A 10 file
## -B 5 显示匹配的前5行
grep -B 5 file
6. 只过滤文件名
# 从find的文件名中过滤--推荐
find . | grep 文件名
# grep原生只过滤文件名---很慢
## -l 只显示符合匹配条件的文件名
grep -l 文件名字符串 文件列表
grep -l main *.c
7. 过滤还有特殊字符的字符串
# 过滤字符串"-c"
## \防止转义
cat |grep "\-c"
通配符(匹配文件名)
参考: /linux_basic/content/first_sense_for_linux/command_learning/
# 代表任意字符{0到多个}
*
# 代表一个字符
?
# 中间为字符组合,仅匹配其中任一一个字符
[]
# 单个小写字母
[a-z]
# 单个大写字母
[A-Z]
常用正则表达式(匹配文件内容)
正则表达式常用于日志分析
^
表示以指定字符开头$
表示以指定字符结尾.
表示匹配任意一个非空字符.*
表示匹配任意非空字符(1— N个非空字符)?
表示可以重复前面指定的字符1此或0次.?
表示匹配任意两个非空字符
grep常用语法
-
通过模式对文件内容进行查找
-
查找 例子如下: grep mail /etc/passwd
- 想知道查找内容是哪一行加-n: grep -n mail /etc/passwd
-
管道操作符 |
- 将管道操作符左边命令的输出作为右边命令的输入
- cat /etc/passwd | grep root
- 例如 cat | grep 5.6
- ls -la | grep ^d 指以d开头的字符串
- cat /etc/passwd | grep ^r
- ls -la | gerp [1] 指除了以d开头之外的所有内容
- grep “张三” filename | grep “李四”
- 管道符|的优点是可以多级筛选,缩小范围
- ls -la | grep ^d
- 查询当前目录下以d开头的内容
- ls -la | grep[2]
- 查询目录不以d开头的内容
- 将管道操作符左边命令的输出作为右边命令的输入
-
-c 统计复合结果条件的行数
- grep -c “INSERT”
- 统计agileone中insert有几行
- grep -c “INSERT”
-
-n 查看行数
- grep -n “INSERT”
- 在显示符合样式的那一行之前,标示出该行的列数编号。
- grep ‘^*’ file
- 查找显示所有以"*"打头的行
- grep -n “INSERT”
-
-v 看除了insert之外剩余的内容
- grep -v “INSERT”
- 查看除了ls之外(-v)的行。并显示行号(-n)cat /etc/passwd | grep -v -n ls
- grep -v “INSERT”
-
区分大小写查找
- 列出大小写都存在的关键字(soup):grep -i soup hello
- soup是要查找的关键字内容
- hello是文件
- 只查看大写的关键字(Soup):grep Soup hello
- Soup是要查找的大写关键字内容
- hello是文件
- 列出大小写都存在的关键字(soup):grep -i soup hello
-
精确查找,例如需要查找483和484这两个数字
- grep “48[34]” hello
- 括号内的关键字会单独和括号前的关键字组合查找
- 得出的结果查找483和484
- hello是文件
- grep “48[34]” hello
-
通配符
- grep “I…DB*” 寻找以I开头,以DB结尾的内容,然后中间几个点,代表中间省略几个字母
- grep '" ’ 查询内容为双引号,必须加上转义\