0

0

shell编程--grep命令如何用?

PHP中文网

PHP中文网

发布时间:2017-06-20 11:12:49

|

2773人浏览过

|

来源于php中文网

原创

大家在学习正则表达式之前,首先要明确一点,并把它牢牢记在心里,那就是:

在linux中,通配符是由shell解释的,而正则表达式则是由命令解释的,不要把二者搞混了。切记!!!

通常有三种文本处理工具/命令:grep、sed、awk,它们三者均可以解释正则。下面我就为大家介绍grep命令的使用方法。

 

一、使用grep命令搜索文件中的内容

grep和egrep命令能够在一个或多个文件的内容中搜索某一特定的字符模式,也被称为正则表达式(regular expressions)。一个模式可以是一个单一的字符、一个字符串、一个单词或一个句子。

一个正则表达式是描述一组字符串的一个模式。正则表达式的构成是模仿了数学表达式,通过使用操作符将较小的表达式组合成一个新的表达式。一个正则表达式既可以是一些纯文本文字,也可以是用来产生模式的一些特殊字符。为了进一步定义一个搜索模式,grep命令支持以下几种正则表达式的元字符,也称通配符。

ps:正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。元字符使正则表达式具有处理能力。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

c*:将匹配0个或多个字符c

.:将匹配任何一个且只能是一个字符(换行符除外)

[xyz]:将匹配方括号中的任意一个字符

[^xyz]:将匹配不包括方括号中的字符的所有字符

^:锁定行的开头

$:锁定行的结尾

在基本正则表达式中,如元字符*、+、{}、|、和()已经失去了它们原来的意义,如果要回复他们原本的含义要在之前冠以反斜线\,如\*、\+等。

grep命令是用来在每一个文件中或标准输出上搜索特定的模式。当使用grep命令时,包含一个指定字符模式的每一行都会被打印在屏幕上,grep命令的语法格式如下:

grep 选项 模式 文件名

其中,选项可以改变grep命令的搜索方式,除了-w选项外,其他的每个选项都可以在egrep和fgrep命令中使用。grep命令常用选项如下:

-c(count):仅列出包含模式的行数

-i(ignore):忽略模式中字母大小写

-l(list):列出带有匹配行的文件名

-n:在匹配行的前面列出行号

-v:列出没有匹配模式的行(取反)

-w:把表达式当做一个完整的单字来搜索,忽略那些部分匹配的行

-q  :静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容

-A n  :如果匹配成功,则将匹配行及其后n行一起打印出来

-B n  :如果匹配成功,则将匹配行及其前n行一起打印出来

-C n  :如果匹配成功,则将匹配行及其前后n行一起打印出来

ps:如果搜索的是多个文件,grep命令的结果只显示在文件中发现匹配模式的文件名;

      如果搜索的是单个文件,grep命令的结果将显示每一个包含匹配模式的行。

 

上面就是grep命令的基本使用方法。但是有时一个简单的正则表达式无法定位你要搜索的内容,如要搜索同时满足模式一和模式二的数据行,这时egrep命令就可以派上用场。

egrep命令的语法格式和grep命令相同。但是egrep命令是用来在一个或多个文件的内容中利用扩展的正则表达式的元字符搜索特定的模式。扩展的正则表达式的元字符包含了grep命令中使用的正则表达式元字符的同时,还增加了一些额外的元字符,大致有下面几个:

+:匹配一个或多个前导字符

Shell脚本编写基础 中文WORD版
Shell脚本编写基础 中文WORD版

Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统

下载

a|b:匹配a或b

(RE):匹配括号中的正则表达式RE

 

下面我将通过一些基本的例子来增进大家对grep和egrep命令用法的了解。鉴于grep命令中所有的选项egrep都能够使用(egrep更加强大),为方便起见我将使用egrep命令为大家演示:

例一:显示出文件/etc/passwd含有root的行

 

例二:输出/etc/passwd中任何包含bash的所有行,还要输出紧接着这行的上下各两行的内容

 

例三:显示出/etc/passwd中有多少行含有nologin

 

例四:显示出/etc/passwd中那些行含有root,并将行号一块输出

 

例五:

新建用户abominable、abominate、anomie、atomize,编写正则表达式,将他们匹配出来

 

 

例六:新建用户Alex213sb、Wpq2222b、yH438PIG、egon666、egon过滤出用户名组成是字母+数字+字母的行

 

例七:显示出/etc目录下所有包含root的文件名

 

例八:过滤掉/etc/ssh/sshd_config内所有注释和所有空行

 

以上例子只是很小的一部分,大家只要勤加练习,一定很快就能掌握grep命令的使用啦 ^^

 

相关专题

更多
PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

11

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

71

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

108

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

152

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

58

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

44

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

20

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

131

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

45

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
尚观shell视频教程
尚观shell视频教程

共8课时 | 1.6万人学习

Linux开发篇视频教程
Linux开发篇视频教程

共18课时 | 4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号