grep常用方法

grep常用参数

学习资料:https://blog.51cto.com/oldboy/5430941
https://www.linuxcool.com/grep
https://wangchujiang.com/linux-command/c/grep.html

参数释义
-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

在这里插入图片描述


0.grep高亮

参考: https://blog.youkuaiyun.com/akaks0/article/details/72902390

# grep高亮
## -E 正则表达式
## --color 指定颜色,默认值是--color=auto
grep -E "word1|word2|word3" file.txt --color

1.grep ‘字符串’

这是最普通的使用方式:

grep 关键字 文件名
# 匹配文件中包含 MANPATH 的那一行:
cat manpath.config | 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 manpath.config| grep -v 'MANPATH'`

不包括grep本身

不包含grep本身

# -v参数含义为不包括(取反)
ps aux | grep -v "grep" | grep defunct

3、 grep -E 同时匹配多个关键字–关系

grep -E 是使用扩展正则表达式
也就是egrep命令

# 匹配 file.txt 中包含 word1 或 word2 或 word3 的行。
## 满足其中任意条件(word1、word2和word3之一)就会匹配。
## -E 使用正确表达式
## |正则表达式中的 或
grep -E "word1|word2|word3" file.txt

grep过滤空白行和注释行

# -E使用正则表达式
# -v 取反
## ^# 以#号开头
## ^$ 以空开头,以空结尾(空白行)
grep -Ev '^#|^$' filename

4、 同时匹配多个关键字–关系

使用管道符连接多个 grep ,间接实现多个关键字的与关系匹配:

# 必须同时满足三个条件(word1、word2和word3)才匹配
grep word1 file.txt | 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 test.tx |grep "\-c"

8.从指定目录过滤

# -r 递归地在所有文件中查找指定的字符串。
# -n 在输出行前加上该行的行号。
grep -rn limits.so /etc/pam.d

9.zgrep从压缩包中过滤

zgrep  关键字 *.tar.gz

通配符(匹配文件名)

参考: https://abcfy2.gitbooks.io/linux_basic/content/first_sense_for_linux/command_learning/wildcard.html

# 代表任意字符{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 1.txt | 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” agilenone.sql
      • 统计agileone中insert有几行
  • -n 查看行数

    • grep -n “INSERT” agileone.sql
      • 在显示符合样式的那一行之前,标示出该行的列数编号。
    • grep ‘^*’ file
      • 查找显示所有以"*"打头的行
  • -v 看除了insert之外剩余的内容

    • grep -v “INSERT” agileone.sql
      • 查看除了ls之外(-v)的行。并显示行号(-n)cat /etc/passwd | grep -v -n ls
  • 区分大小写查找

    • 列出大小写都存在的关键字(soup):grep -i soup hello
      • soup是要查找的关键字内容
      • hello是文件
    • 只查看大写的关键字(Soup):grep Soup hello
      • Soup是要查找的大写关键字内容
      • hello是文件
  • 精确查找,例如需要查找483和484这两个数字

    • grep “48[34]” hello
      • 括号内的关键字会单独和括号前的关键字组合查找
      • 得出的结果查找483和484
      • hello是文件
  • 通配符

    • grep “I…DB*” agileone.sql 寻找以I开头,以DB结尾的内容,然后中间几个点,代表中间省略几个字母
    • grep '" ’ agileone.sql 查询内容为双引号,必须加上转义\
### ### grep 工具常用命令列表 grepLinux 系统中用于搜索文本的强大工具,支持正则表达式匹配,并可在多个文件中查找特定模式的内容。以下是 grep 工具的常用命令及其用途: #### 基础搜索命令 - **`grep "pattern" file`** 在指定文件中搜索包含 `pattern` 的行。例如: ```bash grep "error" /var/log/syslog ``` 此命令会列出 `/var/log/syslog` 文件中包含字符串 `"error"` 的所有行[^1]。 - **`grep -i "pattern" file`** 忽略大小写进行搜索。例如: ```bash grep -i "error" /var/log/syslog ``` 此命令会匹配 `"error"`、`"Error"` 或 `"ERROR"` 等形式的字符串[^2]。 - **`grep -r "pattern" /path/to/dir`** 递归搜索指定目录下的所有文件。例如: ```bash grep -r "TODO" /home/user/project/ ``` 会搜索 `/home/user/project/` 目录及其子目录中所有包含 `"TODO"` 的文件。 #### 输出控制命令 - **`grep -n "pattern" file`** 显示匹配行及其行号。例如: ```bash grep -n "warning" file.txt ``` 会输出类似 `5:This is a warning message` 的结果,其中 `5` 表示行号[^2]。 - **`grep -c "pattern" file`** 统计匹配行的数量。例如: ```bash grep -c "success" results.log ``` 会输出文件中包含 `"success"` 的行数。 - **`grep -l "pattern" file1 file2 ...`** 仅显示包含匹配模式的文件名。例如: ```bash grep -l "404" *.log ``` 会列出所有包含 `"404"` 错误的 `.log` 文件名。 - **`grep -v "pattern" file`** 反向匹配,显示不包含指定模式的行。例如: ```bash grep -v "success" results.log ``` 会输出所有不包含 `"success"` 的行。 #### 高级搜索命令 - **`grep -E "pattern1|pattern2" file`** 使用扩展正则表达式匹配多个模式。例如: ```bash grep -E "error|warning" /var/log/syslog ``` 会匹配包含 `"error"` 或 `"warning"` 的行。 - **`grep -A 2 "pattern" file`** 显示匹配行及其后两行内容。例如: ```bash grep -A 2 "start" script.sh ``` 会输出匹配 `"start"` 的行及其后面的两行内容。 - **`grep -B 2 "pattern" file`** 显示匹配行及其前两行内容。例如: ```bash grep -B 2 "end" script.sh ``` 会输出匹配 `"end"` 的行及其前面的两行内容[^2]。 - **`grep -C 2 "pattern" file`** 显示匹配行及其前后各两行内容。例如: ```bash grep -C 2 "debug" log.txt ``` 会输出匹配 `"debug"` 的行及其上下文各两行的内容[^2]。 #### 正则表达式与高亮显示 - **`grep "[0-9]" file`** 使用正则表达式匹配任意数字。例如: ```bash grep "[0-9]" data.txt ``` 会输出包含数字的行[^2]。 - **`grep -E "^[A-Za-z]" file`** 匹配以字母开头的行。例如: ```bash grep -E "^[A-Za-z]" file.txt ``` 会输出所有以英文字母开头的行。 - **`alias grep='grep --color=auto'`** 设置别名使 grep 输出结果高亮。例如: ```bash alias grep='grep --color=auto' ``` 设置后,所有 `grep` 命令的匹配部分会以颜色高亮显示,提升可读性[^3]。 #### 关键字加引号的区别 - **不加引号**:搜索包含关键字中任意单词的文本行。例如: ```bash grep error log.txt ``` 会匹配包含 `"error"` 的行。 - **单引号**:对特殊字符进行转义,进行完全匹配。例如: ```bash grep '$error' log.txt ``` 会匹配包含字面量 `"$error"` 的行,而不会被 `$` 作为变量解析。 - **双引号**:关键字即使包含特殊符号,也原样输出。例如: ```bash grep "$error" log.txt ``` 若 `$error` 是变量,会被替换为变量值,若想原样搜索,需使用单引号[^4]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值