shell脚本之正则表达式grep、sed

正则表达式的定义

  • 正则表达式又称正规表达式、常规表达式。在代码中常简写为 regex、regexp 或 RE。正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,简单来说, 是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特定字符串。
  • 正则表达式是由普通字符与元字符组成的文字模式。模式用于描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。其中普通字符包括大小写字母、数字、标点符号及一些其他符号,元字符则是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
  • 正则表达式一般用于脚本编程与文本编辑器中。很多文本处理器与程序设计语言均支持正则表达式,如前面提到的 Perl、Linux 系统中常见的文本处理器(grep、egrep、sed、awk)。正则表达式具备很强大的文本匹配功能,能够在文本海洋中快速高效地处理文本。

正则表达式用途

  • 对于一般计算机用户来说,由于使用到正则表达式的机会不多,所以无法体会正则表达式的魅力,而对于系统管理员来说,正则表达式则是必备技能之一。
  • 正则表达式对于系统管理员来说是非常重要的,系统运行过程中会产生大量的信息,这些信息有些是非常重要的,有些则仅是告知的信息。身为系统管理员如果直接看这么多的信息数据,无法快速定位到重要的信息,如“用户账号登录失败”“服务启动失败”等信息。这时可以通过正则表达式快速提取“有问题”的信息。如此一来,可以将运维工作变得更加简单、方便。
  • 目前很多软件也支持正则表达式,最常见的就是邮件服务器。在 Internet 中,垃圾/广告邮件经常会造成网络塞车,如果在服务器端就将这些问题邮件提前剔除的话,客户端就会减少很多不必要的带宽消耗。而目前常用的邮件服务器 postfix 以及支持邮件服务器的相关分析软件都支持正则表达式的比对功能。将来信的标题和内容与特殊字符串进行对比,发现问题邮件就过滤掉。
  • 除邮件服务器之外,很多服务器软件都支持正则表达式。虽然这些软件都支持正则表达式,不过字符串的对比规则还需要系统管理员来添加,所以作为系统管理员,正则表达式是必须掌握的技能之一。
查找特定字符 grep

-n显示行号
-i表示不区分大小写
set -G 标注行数

grep -n ‘the' httpd.conf 显示查找the

在这里插入图片描述

grep -n ‘th[io]en’  httpd.conf显示查找中间的的

在这里插入图片描述

grep -n 'oo' httpd.conf  查找包含重复单个字符“oo”

在这里插入图片描述

grep -n ‘[^w]oo’ httpd.conf  oo前不以w开头的

在这里插入图片描述

grep -n '[^a-z]oo' httpd.conf  查找不是小写字母的为首行首

在这里插入图片描述

grep -n '[0-9]' httpd.conf 查找数字

在这里插入图片描述

grep -n '[0-9]*' httpd.conf  查找0-9加通配符,没有数字也会出来

在这里插入图片描述

grep -n ‘[^a-zA-Z]oo’ httpd.conf   不以字母为开头的只能查看到数字和标点符号

在这里插入图片描述

grep -n ‘^the’ httpd.conf  查找以the开头的行首

在这里插入图片描述

grep -n ‘’\.$'httpd.conf  以.为结尾的行

在这里插入图片描述

grep -n ‘^$’ httpd.conf   只查看空白行

在这里插入图片描述

grep -n ''w..d'  httpd.conf  查看w开头d结尾的单词ward(里面有几个单词就有几个点)

在这里插入图片描述

grep -n ‘ooo*’  httpd.conf 查询包含至少两个oo以上的字符串

在这里插入图片描述

grep -n ‘woo*d’  httpd.conf  查询以w开头d结尾,中间至少一个o的字符串

在这里插入图片描述

grep -n ‘w.*d’ httpd.conf  查询以w开头d结尾

在这里插入图片描述

grep -n ‘[0-9][0-9]*’  httpd.conf  查询任意数字所在行

在这里插入图片描述

grep -n  ‘o\{2\} '   httpd.conf  匹配2个以上的oo

在这里插入图片描述

grep -n ‘wo\{2,5\}’   httpd.conf 查询以w开头d结尾的,中间包含2~5个o

在这里插入图片描述

grep -n ‘wo\{2,5\}d’ httpd.conf  查询以w开头d结尾的,中间包含2个以上o

在这里插入图片描述

基础正则表达式常见元字符

在这里插入图片描述

扩展正则表达式常见元字符

在这里插入图片描述

sed 的工作流程主要包括读取、执行和显示三个过程。
  • 读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。
  • 执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行。
  • 显示:发送修改后的内容到输出流。再发送数据后,模式空间将会被清空。
    在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。
常见的 sed 命令选项主要包含以下几种。
  • -e 或–expression=:表示用指定命令或者脚本来处理输入的文本文件。
  • -f 或–file=:表示用指定的脚本文件来处理输入的文本文件。
  • -h 或–help:显示帮助。
  • -n、–quiet 或 silent:表示仅显示处理后的结果。
  • -i:直接编辑文本文件。
“操作”用于指定对文件操作的动作行为,也就是 sed 的命令。通常情况下是采用的“[n1[,n2]]”操作参数的格式。n1、n2 是可选的,不一定会存在,代表选择进行操作的行数,如操作需要在 5~20 行之间进行,则表示为“5,20 动作行为”。常见的操作包括以下几种。
  • a:增加,在当前行下面增加一行指定内容。
  • c:替换,将选定行替换为指定内容。
  • d:删除,删除选定的行。
  • i:插入,在选定行上面插入一行指定内容。
  • p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用。
  • s:替换,替换指定字符。
  • y:字符转换。
sed -n ‘p’ hrrpd.conf   等同于cat查看内容

在这里插入图片描述

sed -n '3p' httpd.conf  输出第3行

在这里插入图片描述

sed -n '3,5p' aaahttpd.conf  输出第3和5行

在这里插入图片描述

sed -n 'n;p' httpd.conf 输出所有奇数行,n表示读入下一行

在这里插入图片描述

sed -n 'p;n' httpd.conf 输出所有奇数行,n表示读入下一行

在这里插入图片描述

sed -n '1,5{p;n}' httpd.conf   输出第1~5行之间的奇数

在这里插入图片描述

sed -n ‘10,&{n;p}’ httpd.conf  输出第10行至文件尾之间的偶数

在这里插入图片描述

sed -n '/the/p' httpd.conf 输出包含the的行

在这里插入图片描述

sed -n '4,/the/p' httpd.conf    输入从第4行至第一个包含

在这里插入图片描述

sed -n ’/the/=‘ httpd.conf  包含the的行,所在的行号

在这里插入图片描述

sed -n '/^PI/p' httpd.conf   输出以PI开头的行

在这里插入图片描述

sed  -n '/^the/p' httpd.conf   以the为开头行

在这里插入图片描述

sed -n '/[0-9]$/p' httpd.conf  输出以数字结尾的行

在这里插入图片描述

sed -n ‘/\<wood\>/p’ httpd.conf  输出包含单词wood的行,\<、\>代表单词边界

在这里插入图片描述

删除符合条件的文本(d)

因为后面的示例还需要使用测试文件 test.txt,所以在执行删除操作之前需要先将测试文件备份。以下示例分别演示了 sed 命令的几种常用删除用法。
下面命令中 nl 命令用于计算文件的行数,结合该命令可以更加直观地查看到命令执行的结果。

nl httpd.conf | sed ‘3d’   删除第3行

在这里插入图片描述

nl httpd.conf | sed ‘3,5d’ 删除第3行第5行

在这里插入图片描述

nl httpd.conf | sed '/cross/d'  删除带有cross的行(原来的第六行)

在这里插入图片描述

red ‘/^[a-z]/d’ httpd.conf  删除以小写字母开头的行

在这里插入图片描述

sed ‘/\.$/d’ httpd.conf  删除以”.“结尾的行

在这里插入图片描述

sed ‘/^$/d’ httpd.conf  删除所有空行

在这里插入图片描述

sed ‘s/the/THE/’ httpd.conf  将每行中的the替换为THE

在这里插入图片描述

sed ‘s/l/L/2’ httpd.conf 

在这里插入图片描述

sed ‘s/the/THE/g’ httpd.conf 将文件中所有the替换成THE

在这里插入图片描述

sed ‘s/o//g’ httpd.conf 将文件中的所有o删除

在这里插入图片描述

sed ‘s/^/#/’ httpd.conf 在每行首行插入#号

在这里插入图片描述

sed ‘/the/s/^/#/’ httpd.conf  行首是the的前面插入#

在这里插入图片描述

sed ‘s/$/EOF/’ httpd.conf 在每行行尾插入EOF

在这里插入图片描述

sed ‘3,5s/the/THE/g’ httpd.conf    

在这里插入图片描述

sed ‘/the/s/o/0/g’ httpd.conf  the中所有的o都替换成0

在这里插入图片描述

sed  ‘/the/{H;d};$G’ httpd.conf  将the的行迁移至文件末尾

在这里插入图片描述

sed ‘1,5{H;d};17G’ httpd.conf   将1~5行内容转移到17行后

在这里插入图片描述

sed ‘/the/wout.file’ httpd.conf  将the的行另纯为文件out.file

在这里插入图片描述

sed ‘/the/r/etc/hostname’ 将/ect/hostname内容添加到the的每行后

在这里插入图片描述

sed ‘3aNew’ httpd.conf 在第三行插入一个新行,内容为New

在这里插入图片描述

sed ‘/the/aNew’ httpd.conf  在有the的每行后插入一个新行,内容为New

在这里插入图片描述

sed ‘3aNew1\nNew2’ httpd.conf  在第3行插入多行内容,中间的\n表示换行

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值