当前位置: 首页 > news >正文

【linux指令】一文掌握 Grep 的指令的详细用法

文章目录

    • 入门
      • 使用
      • 选项示例
    • Grep 正则表达式
      • 通配符(Wildcards)
      • 量词(Quantifiers)
      • POSIX
      • 字符串
      • 位置
    • 更多示例
      • 搜索命令行历史记录
      • 搜索多个文件并查找匹配文本在哪些文件中
      • 多级目录中对文本进行递归搜索
      • 搜索结果中包括或者排除指定文件
      • 输出包含匹配字符串的行数 -n 选项
      • 忽略匹配样式中的字符大小写
      • 统计文件或文本中包含匹配字符串的行数 -c 选项

本备忘单旨在快速提醒使用命令行程序 grep 所涉及的主要概念,并假设您已经了解其用法。

参考:grep 中文文档 (jaywcjlove.github.io)

入门

使用

搜索标准输出(即文本流)

$ grep [options] search_string

在文件中搜索确切的字符串:

$ grep [options] search_string path/to/file

打印 myfile.txt 中包含字符串“mellon”的行

$ grep 'mellon' myfile.txt

文件名中接受通配符。

选项示例

选项示例说明
-igrep -i ^DA demo.txt忘记区分大小写
-wgrep -w “of” demo.txt仅搜索完整的单词
-Agrep -A 3 ‘Exception’ error.log匹配字符串后显示 3 行
-Bgrep -B 4 ‘Exception’ error.log在匹配字符串前显示 4 行
-Cgrep -C 5 ‘Exception’ error.log在匹配字符串周围显示 5 行
-rgrep -r ‘github.io’ /var/log/nginx/递归搜索 (在子目录内)
-vgrep -v ‘warning’ /var/log/syslog返回所有与模式不匹配的行
-egrep -e ‘^al’ filename使用正则表达式 (以’al’开头的行)
-Egrep -E ‘ja(s|cks)on’ filename扩展正则表达式 (包含 jason 或 jackson 的行)
-cgrep -c ‘error’ /var/log/syslog计算匹配数
-lgrep -l ‘robot’ /var/log/*打印匹配文件的名称
-ogrep -o search_string filename只显示字符串的匹配部分
-ngrep -n “go” demo.txt显示匹配的行号

Grep 正则表达式

有关更复杂的要求,请参阅完整版的正则表达式备忘单。

通配符(Wildcards)

:-:-
.任何字符
?可选且只能出现一次
*可选的,可以多次出现
+必需并且可以多次出现

量词(Quantifiers)

:-:-
{n}前一项恰好出现 n 次
{n,}上一个项目出现 n 次或更多
{,m}上一个项目最多出现 n 次
{n,m}上一项出现在 n 到 m 次之间

POSIX

:-:-
[:alpha:]任何大小写字母
[:digit:]任何数字
[:alnum:]任何大小写字母或数字
[:space:]任何空格

字符串

:-:-
[A-Z­a-z]任何大小写字母
[0-9]任何数字
[0-9­A-Z­a-z]任何大小写字母或数字

位置

:-:-
^行的开头
$行结束
^$空行
\<词的开头
\>词尾

更多示例

搜索命令行历史记录

history | grep git

输入过 git 命令的记录

搜索多个文件并查找匹配文本在哪些文件中

grep -l "text" file1 file2 file3...

多级目录中对文本进行递归搜索

grep "text" . -r -n

. 表示当前目录。

搜索结果中包括或者排除指定文件

# 目录中所有的 .php 和 .html 文件中
# 递归搜索字符 "main()"
grep "main()" . -r --include *.{php,html}

# 在搜索结果中排除所有 README 文件
grep "main()" . -r --exclude "README"

# 在搜索结果中排除 filelist 文件列表里的文件
grep "main()" . -r --exclude-from filelist

输出包含匹配字符串的行数 -n 选项

grep "text" -n file_name
# 或
cat file_name | grep "text" -n

#多个文件
grep "text" -n file_1 file_2

忽略匹配样式中的字符大小写

echo "hello world" | grep -i "HELLO"
# hello

统计文件或文本中包含匹配字符串的行数 -c 选项

grep -c "text" file_name

相关文章:

  • 微服务全局ID方案汇总
  • 《Java对象“比武场“:Comparable与Comparator的巅峰对决》
  • 如何筛选能实现共享自助健身房“灵活性”的物联网框架?
  • 深入理解Tomcat:Java Web服务器的安装与配置
  • ClickHouse合并任务与查询延迟专项测试
  • 优化GreatSQL日志文件空间占用
  • Git 克隆问题排查与解决方案
  • 【VSCODE 插件 可视化】:SVG 编辑插件 SVG Editor
  • 浅谈Linux中的Shell及其原理
  • 多线程(超详细) (ε≡٩(๑>₃<)۶ 一心向学)
  • JS内置构造函数有哪些???
  • Spring、Spring Boot、Spring Cloud 的区别与联系
  • 人工智能时代教育行业该如何转型:迎接挑战,塑造未来教育生态
  • 驻场运维服务方案书(Word文件)
  • Ansible相关工具:ansible-doc、ansible
  • 【Power Platform系列】如何在画布应用中调用工作流上传附件
  • QT编程之JSON处理
  • 【VUE2】第五期——VueCli创建项目、Vuex多组件共享数据
  • 使用GitHub Actions实现Git推送自动部署到服务器
  • Diffie-Hellman协议简单介绍
  • 金融月评|尽早增强政策力度、调整施策点
  • 沪指跌0.68%报3380.82点,创指跌1.92%:券商、军工跌幅靠前
  • 《求是》杂志发表习近平总书记重要文章《锲而不舍落实中央八项规定精神,以优良党风引领社风民风》
  • 92岁上海交大退休教师捐赠百万元给学校,其父也曾设奖学金
  • 泽连斯基启程前往土耳其
  • 哪种“网红减肥法”比较靠谱?医学专家和运动专家共同解答