一篇文章教会你利用Linux的grep命令

饭宝  金牌会员 | 2024-12-31 07:48:37 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 840|帖子 840|积分 2520

  1. grep 是 Linux 中用于搜索文本的强大命令,它能根据给定的模式在文件或标准输入中查找匹配的行,并将包含匹配模式的行输出。
复制代码
1. 基本语法

  1. grep [选项] 搜索模式 文件
  2. 搜索模式:可以是一个字符串或正则表达式,用来匹配文件中的内容。
  3. 文件:指定要搜索的文件或路径。
复制代码
示例
  1. [root@test test]# cat test.txt
  2. ni hao lisi
  3. hello zhangsan
  4. wo shi wangwu
  5. hello zhaoliu
  6. [root@test test]# grep "hello" test.txt
  7. hello zhangsan
  8. hello zhaoliu
复制代码
2. 常用选项

2.1 -i:忽略大小写

忽略大小写来匹配文本。
  1. [root@test test]# cat test.txt
  2. ni hao lisi
  3. hello zhangsan
  4. wo shi wangwu
  5. hello zhaoliu
  6. HELLO aaaaa
  7. bbbb HelLo
  8. [root@test test]# grep "hello" test.txt
  9. hello zhangsan
  10. hello zhaoliu
  11. [root@test test]# grep -i "hello" test.txt
  12. hello zhangsan
  13. hello zhaoliu
  14. HELLO aaaaa
  15. bbbb HelLo
复制代码
2.2 -v:反向匹配

只显示不匹配搜刮模式的行。
  1. [root@test test]# cat test.txt
  2. ni hao lisi
  3. hello zhangsan
  4. wo shi wangwu
  5. hello zhaoliu
  6. HELLO aaaaa
  7. bbbb HelLo
  8. [root@test test]# grep -v "hello" test.txt
  9. ni hao lisi
  10. wo shi wangwu
  11. HELLO aaaaa
  12. bbbb HelLo
复制代码
2.3 -r 或 -R:递归搜刮目录

在目录及其子目录中递归地搜刮匹配项。
  1. [root@test test]# grep -r "hello" /root/test/
  2. /root/test/test.txt:hello zhangsan
  3. /root/test/test.txt:hello zhaoliu
复制代码
2.4 -n:显示行号

显示匹配行在文件中的行号。
  1. [root@test test]# grep -n "hello" test.txt
  2. 2:hello zhangsan
  3. 4:hello zhaoliu
复制代码
2.5 -c:只显示匹配的行数

显示文件中匹配模式的行数,而不是详细内容。
  1. [root@test test]# grep -c "hello" test.txt
  2. 2
复制代码
2.6 -l 和 -L:只显示文件名



  • -l:显示包含匹配模式的文件名。
  • -L:显示不包含匹配模式的文件名。
  1. [root@test test]# grep -l "hello" *.txt
  2. test.txt
复制代码
2.7 -w:匹配整个单词

只匹配完整的单词,而不是单词的一部门。
  1. [root@test test]# grep -w "hello" test.txt
  2. hello zhangsan
  3. hello zhaoliu
复制代码
2.8 -x:匹配整行

只有当整行匹配搜刮模式时才显示该行。
  1. [root@test test]# grep -x "hello" test.txt
  2. [root@test test]# grep -x "hello zhaoliu" test.txt
  3. hello zhaoliu
复制代码
2.9 -A、-B、-C:显示上下文行



  • -A n:显示匹配行之后的 n 行。
  • -B n:显示匹配行之前的 n 行。
  • -C n:显示匹配行前后各 n 行。
  1. [root@test test]# grep -A 2 "hello" test.txt # 匹配行和之后2行
  2. hello zhangsan
  3. wo shi wangwu
  4. hello zhaoliu
  5. HELLO aaaaa
  6. bbbb HelLo
  7. [root@test test]# grep -B 2 "hello" test.txt # 匹配行和之前2行
  8. ni hao lisi
  9. hello zhangsan
  10. wo shi wangwu
  11. hello zhaoliu
  12. [root@test test]# grep -C 2 "hello" test.txt # 匹配行和前后各2行
  13. ni hao lisi
  14. hello zhangsan
  15. wo shi wangwu
  16. hello zhaoliu
  17. HELLO aaaaa
  18. bbbb HelLo
复制代码
2.10 -E:利用扩展正则表达式

启用扩展正则表达式(等同于 egrep),支持更多正则表达式操作符,如 |, +, ?, {} 等。
  1. grep -E "hello|world" file.txt
复制代码
2.11 -f:从文件中读取模式

从指定文件中读取多行模式进行搜刮。
  1. grep -f pattern.txt file.txt
复制代码
在 file.txt 中查找 pattern.txt 文件中的每个模式。
2.12 -o:仅输出匹配部门

仅输出匹配的部门,而不是整行。
  1. [root@test test]# grep -o "hello" test.txt
  2. hello
  3. hello
复制代码
3. grep 正则表达式示例



  • 匹配开头的字符串 ^:
    1. grep "^hello" file.txt
    复制代码
    匹配以 "hello" 开头的行。
  • 匹配行尾的字符串 $:
    1. grep "world$" file.txt
    复制代码
    匹配以 "world" 结尾的行。
  • 匹配恣意单字符 .:
    1. grep "h.llo" file.txt
    复制代码
    匹配 "hallo"、"hello" 等。
  • 匹配多个字符 *:
    1. grep "hel*o" file.txt
    复制代码
    匹配 "heo"、"hello"、"hellllo" 等。
  • 匹配字符集 []:
    1. grep "h[aeiou]llo" file.txt
    复制代码
    匹配 "hallo"、"hello"、"hollo" 等。
  • 匹配字符范围 [a-z]:
    1. grep "h[a-z]llo" file.txt
    复制代码
    匹配 "hallo"、"hello" 等小写字符的组合。
  • 匹配多个模式 |(需共同 -E 或 egrep 利用):
    1. grep -E "hello|world" file.txt
    复制代码
    匹配包含 "hello" 或 "world" 的行。
4. 实用示例

4.1 在体系日志中查找错误信息

  1. [root@test test]# grep -i "error" /var/log/messages
  2. Nov 10 15:04:18 test kernel: BERT: Boot Error Record Table support is disabled. Enable it by using bert_enable as kernel parameter.
  3. Nov 10 15:04:25 test mcelog: ERROR: AMD Processor family 23: mcelog does not support this processor.  Please use the edac_mce_amd module instead.
复制代码
4.2 查找包含多个关键字的行

  1. [root@test test]# grep -i "error" /var/log/messages |grep "Unable"
  2. Nov 10 15:04:27 test libvirtd: 2024-11-10 07:04:27.035+0000: 1432: error : virHostCPUGetTscInfo:1389 : Unable to open /dev/kvm: No such file or directory
  3. Nov 10 15:04:27 test libvirtd: 2024-11-10 07:04:27.173+0000: 1432: error : virHostCPUGetTscInfo:1389 : Unable to open /dev/kvm: No such file or directory
  4. Nov 10 15:04:27 test libvirtd: 2024-11-10 07:04:27.174+0000: 1432: error : virHostCPUGetTscInfo:1389 : Unable to open /dev/kvm: No such file or directory
复制代码
4.3 忽略二进制文件搜刮文本

  1. grep -I "hello" *
复制代码
4.4 从命令输出中查找特定行

  1. [root@test test]# dmesg |grep "usb"
  2. [    0.678613] usbcore: registered new interface driver usbfs
  3. [    0.678618] usbcore: registered new interface driver hub
  4. [    0.678720] usbcore: registered new device driver usb
复制代码
5. 总结

grep 是文本搜刮和处理惩罚的利器,结合各种选项和正则表达式,可以满足多样化的搜刮需求,特殊适合日志分析和数据处理惩罚等场景。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

饭宝

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表