热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

grep技巧10则

欢迎进入Linux社区论坛,与200万技术人员互动交流进入warning:文中提到的选项如果posix未指定,会特殊说明。1多个关键字查找1.1关键字间ori.使用-e#包含了string.h或者stdlib.h的头文件grep-l-estring.h-estdlib.husrinclude*.h

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 warning:文中提到的选项如果posix未指定,会特殊说明。 1 多个关键字查找 1.1 关键字间 or i. 使用-e #包含了string.h或者stdlib.h的头文件grep -l -e 'string\.h' -e 'stdlib\.h' /usr/include/*.h

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

  warning:文中提到的选项如果posix未指定,会特殊说明。

  1 多个关键字查找

  1.1 关键字间 or i. 使用-e

  #包含了string.h或者stdlib.h的头文件grep -l -e 'string\.h' -e 'stdlib\.h' /usr/include/*.h

  -e 选项还可以避免 关键字是-开头的导致选项解读失败。

  ii. 使用元字符 \|

  grep 'strint\.h\|stdlib\.h' /usr/include/*.h #使用-E 看着舒服grep -E 'string\.h|stdlig\.h' /usr/include/*.h

  iii. 使用-f file cat >multi_pattern stdlib\.h string\.h grep -l -f multi_pattern /usr/include/*.h

  1.2 关键字间 and i. 通过管道

  #同时包含'hello','world'的行echo hello world | grep '\' | grep '\'

  ii. 通过正则 |

  grep -E 'pattern1.*pattern2|pattern2.*pattern1'

  如果包含2个关键字还好,要是n个就有n!种可能!

  2. 单词匹配i. -w(gnu 选项)

  grep -w 'main' /usr/include/*.h

  这个-w很方便ii. \<\> grep '\' /usr/include/*.h

  3.善用 -E -E选项启用 extended expression,正则写起来更加灵活#查看gcc帮助文件里两个the/that/and/or连在一起的行man gcc | grep -E '(\|\|\|\) \1' man gcc | grep -E -w '(the|that|and|or) \1' #查看gcc帮助文件里含两个连续单词的行man gcc | grep -E -w '([a-zA-Z]+) \1'

  使用-E让书写更方便,省去很多的\,同时功能更强大。

  4 忽略大小写 -i #查看INT_MAX的值grep -i 'int_max' /usr/include/limits.h

  -i与\n同时使用的乱象#匹配连续相同单词echo 'it IT' | grep -i -w -E '([a-z]+) \1' echo 'it IT' | grep -E -w '([a-zA-Z]+) \1'

  这是两个相同的单词吗?是的,因为告诉grep不计大小写的!

  有的时候不要光图方便会不准确。

  5 递归查找 -r(posix 未说明)

  #查看日志的错误信息grep -i -w -r -E 'error|failed|failure' /var/log |less

  6 显示匹配行周围行 (posix 未说明)

  B/A/C(before/after/context -B n -A n -C n

  7 取反-v grep -v -w 'hello' filename

  如果没有取反,世界将不再美丽

  8 匹配数 -c echo aaaa | grep -c 'a'

  这个输出是1!因为grep是行匹配的

  9 输出文件名 -l

  grep -l -r -i -w 'filename_max' /usr/include/*.h

  10 只输出匹配部分-o (gnu 选项)

  echo abcddf |grep -o 'dd'

  可以用于验证自己写的正则

  如果出现错误或不准确,感谢指出。


推荐阅读
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 对于许多初学者而言,遇到总线错误(bus error)或段错误(segmentation fault/core dump)是极其令人困扰的。本文详细探讨了这两种错误的成因、表现形式及解决方法,并提供了实用的调试技巧。 ... [详细]
  • 本文详细介绍了如何在Linux系统中创建和管理DB2数据库,包括用户切换、数据库创建、错误处理、连接与断开、表空间和缓冲池的创建,以及用户权限管理和数据导入导出等操作。 ... [详细]
  • 本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 本文详细介绍了 Linux 系统中用户、组和文件权限的设置方法,包括基本权限(读、写、执行)、特殊权限(SUID、SGID、Sticky Bit)以及相关配置文件的使用。 ... [详细]
  • Shell脚本中变量操作详解
    本文基于《鸟哥的Linux私房菜》一书,详细介绍了Shell脚本中变量的使用方法,包括变量的赋值规则、字符串处理技巧以及环境变量的管理等,旨在帮助读者更好地理解和使用Shell中的变量。 ... [详细]
  • Linux系统中光驱与硬盘的设备文件映射
    在Linux操作系统中,所有硬件设备都通过特定的设备文件进行访问。本文详细介绍了磁盘和光驱等存储设备在Linux中的设备文件命名规则及其分区表示方法。 ... [详细]
  • 本文深入探讨了 PHP 实现计划任务的方法,包括其原理、具体实现方式以及在不同操作系统中的应用。通过详细示例和代码片段,帮助开发者理解和掌握如何高效地设置和管理定时任务。 ... [详细]
  • 本文介绍如何配置SecureCRT以正确显示Linux终端的颜色,并解决中文显示问题。通过简单的步骤设置,可以显著提升使用体验。 ... [详细]
  • 本文深入探讨了 Delphi 中类对象成员的核心概念,包括 System 单元的基础知识、TObject 类的定义及其方法、TClass 的作用以及对象的消息处理机制。文章不仅解释了这些概念的基本原理,还提供了丰富的补充和专业解答,帮助读者全面理解 Delphi 的面向对象编程。 ... [详细]
  • 中断向量是计算机系统中用于指向中断服务程序的入口地址。每个中断向量对应一个特定的中断事件,存储在内存中的中断向量表中。该表通常包含256个条目,每个条目占用4个字节,用于存放跳转指令或直接指向中断处理程序的地址。 ... [详细]
  • cJinja:C++编写的轻量级HTML模板引擎
    本文介绍了cJinja,这是一个用C++编写的轻量级HTML模板解析库。它利用ejson来处理模板中的数据替换(即上下文),其语法与Django Jinja非常相似,功能强大且易于学习。 ... [详细]
  • 本文针对初学者在创建Android项目时遇到的R.java文件错误提供了解决方案,通过实际案例和详细的日志分析,帮助读者快速定位并解决问题。 ... [详细]
  • 本文详细探讨了Java命令行参数的概念、使用方法及在实际编程中的应用,包括如何通过命令行传递参数给Java程序,以及如何在Java程序中解析这些参数。 ... [详细]
author-avatar
忧伤丿稻草展
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有