Linux shell基础(四)正则表达式与grep命令 beta

简介:

一、正则表达式

之前学习find命令时,就已经接触过一些简单的正则,那么我们现在来学习一些复杂的正则。首先,我们还是来复习什么是正则表达式,看这个教程先,一定要多看几遍,至少知道正则大概长什么样子。(转载至https://deerchao.net/tutorials/regex/regex.htm )正则就是有规律的一串字符串,用来描述一个特定的内容,正则适合用来处理字符串,不太适合处理数学逻辑。学好正则对编写shell脚本有很大的好处,所有的shell脚本大部分都涉及到正则表达式。各种编程工具中也需要使用正则。

用grep sed awk去处理字符串
能不能写好shell脚本php
ngix配置文件中也有正则
正则核心符号
。一个任意字符

  • 个*
    ? 零个或1个
  • 一个或多个
    ^ 开头
    # 末尾

二、grep命令

(一)grep命令简介

用于过滤文件中的字符,(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。系统本身通过/etc/profile.d目录下的colorgrep.sh文件做了别名==grep --color,能够方便的显示找到的行。

用法: grep [选项]... PATTERN [FILE]...
grep -cniv ‘关键字(正则)’ 文件路径
选项
-i 不区分大小写,默认情况下grep不区分关键字大小写
-c 行数
-n 显示关键词所在行号
-v取反(使用较多)
-r 遍历所有层级子目录
-A后面跟数字,过滤出符合要求的行以及下面的n行
-B后面跟数字,过滤符合要求的行以及上面的n行
-C后面跟数字,过滤符合要求的行以及上下各n行

扩展正则 grep -E ==sed -r ==awk

反复练习,掌握正则表达式
首先做个准备工作,把/etc/passwd文档拷贝到其他路径下,如/tmp下做试验

(二)基本用法示例

1、过滤出关键字root所在的行并显示行号。

grep -n 'root' /etc/passwd

Linux  shell基础(四)正则表达式与grep命令 beta

可以看到有颜色标识关键字。

2、统计某一关键字出现的行数

grep -c 'nologin' passwd

Linux  shell基础(四)正则表达式与grep命令 beta

下面那个15就是说nologin这个关键字出现了15次

3、搜索某一关键字出现的行,然后把没有出现关键字的行过滤出来

grep -vn 'nologin' passwd

Linux  shell基础(四)正则表达式与grep命令 beta

4、搜索整个文件夹,在文件内容中招root。(注意与find命令找到的东西的区别)

grep -r 'root' /etc

Linux  shell基础(四)正则表达式与grep命令 beta

紫色是文件的路径,搜索出来的东西很多,grep把/etc下所有包含root的文件中的root字所在的行和所在的文件信息都列了出来。

5、-ABC 作用演示,能列出关键字所在的行和临近的行。

grep -A2 'root' passwd
grep -B2 'root' passwd
grep -C2 'root' passwd

Linux  shell基础(四)正则表达式与grep命令 beta

Linux  shell基础(四)正则表达式与grep命令 beta

Linux  shell基础(四)正则表达式与grep命令 beta
-C选项会把搜到的行的附近的行都列出来,当然如果搜索的目标在头上或者文尾,就不会列相应的行。

grep+正则表达式(regexp)用法举例

命令写法:grep -(cirvnABC) 'regexp' 文件或目录路径

精髓在regexp的写法,如何正确的把想要的东西用正则表达出来。

1、把含有0到9十个数字任意一个字符的行列出来

grep '[0-9]' passwd

Linux  shell基础(四)正则表达式与grep命令 beta

取反再搜索下
没了,说明passwd文件中每一行都带有数字
Linux  shell基础(四)正则表达式与grep命令 beta
这里说明[0-9]==[0123456789]

2、把不以#号开头的行打印出来,
这条命令经常用于查看程序或者系统的配置文件,这种文件经常有大段的以'#'开头的注释行,直接看很麻烦。

grep -vn '^#' /etc/ssh/sshd_config

Linux  shell基础(四)正则表达式与grep命令 beta

还是有空行,我们要再把空行过滤掉。

grep -vn '^#' /etc/ssh/sshd_config|grep -v '^$'

3、显示test.txt文档中含有r.o关键字的行

grep 'r.o' test.txt

Linux  shell基础(四)正则表达式与grep命令 beta

.号表示任意一个字符,a-z,A-Z,0-9,特殊号等等。

4、搜索test.txt中形如'r*o'的行

grep 'r*o' test.txt

Linux  shell基础(四)正则表达式与grep命令 beta

注意这个正则的匹配结果,“r*o”可以代表的东西是只要以零个或任意多个r开头o结尾的字符,ro肯定可以,o也可以因为他表示0个r和1个o,rrro,rro这些肯定可以。


 本文转自 whytl 51CTO博客,原文链接:http://blog.51cto.com/11934539/2061342


相关文章
|
1月前
|
Shell Linux Windows
让我们熟悉一下 shell 正则表达式使用
正则表达式是一种文本处理工具,用于匹配、查找、替换或提取字符串中的特定模式。通过普通字符和特殊字符(元字符)组成,定义匹配规则。本文档通过示例展示了如何使用正则表达式进行字符串搜索、过滤和模式匹配,包括基本匹配、行首行尾定位、字符集使用、任意字符与重复字符处理以及限定重复次数等高级功能。
46 7
|
1月前
|
人工智能 Shell iOS开发
AI Shell:在命令行里“对话” AI ,微软推出将 AI 助手引入命令行的 CLI 工具,打造对话式交互命令行
AI Shell 是一款强大的 CLI 工具,将人工智能直接集成到命令行中,帮助用户提高生产力。AI Shell 支持多种 AI 模型和助手,通过多代理框架提供丰富的功能和灵活的使用模式。
120 7
|
1月前
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
45 1
|
2月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
80 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
2月前
|
Shell 知识图谱
Shell printf 命令
10月更文挑战第3天
26 1
|
2月前
|
Unix Shell Linux
常见的shell命令
shell常用命令
60 11
|
3月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
3月前
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
152 5
|
2月前
|
Shell PHP
Shell echo命令
10月更文挑战第3天
25 0
|
2月前
|
JSON Java Shell
Dockerfile中RUN、CMD、ENTRYPOINT、SHELL命令的区别
理解这些指令的差异和应用场景,有助于构建高效、灵活且易于管理的Docker镜像。在实际应用中,根据需要选择合适的指令,可以有效地控制镜像构建和容器运行的行为。
241 0