正则表达式(拓展)、grep(拓展)和sed

一、正则表达式

  egrep默认使用的是扩张正则

  表示次数

* 匹配前面字符任意数
0次或者1次
+ 1次或者多次
{n} 匹配n次
{m,n} 最少m次,最多n次
{,n} 匹配前面的字符最多n次
{n,} 匹配前面的字符最少n次

  表示分组

()分组 将多个字符捆绑在一起当作一个整体处理
\1、\2 后向引用
| 或者
a|b a或者b
C|cat C或cat
(C|c)at Cat或cat

二、grep

  格式:grep [选项]… 查找条件 目标文件

选项 功能
-color=auto 对匹配到的文本着色显示
-m 匹配#次后停止
grep -m 1 root /etc/passwd 多个匹配只取第一个
-v 显示不被pattern匹配到的行,即取反
grep -Ev '[[:space:]]*#|^$'

-i

忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行号
grep -c root /etc/passwd 统计匹配到的行号
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何模式,用途写脚本
-A after,后#行
grep -A3 root /etc/passwd 匹配到行后3行显示出来
-B before,前#行
-C context,前后各#行
-e 实现多个选项间的逻辑or关系
grep -e root -e bash /etc/passwd 包含root或者包含bash的行
grep -E root|bash /etc/passwd
-w 匹配整个单词
grep -w root /etc/passwd
useradd rooter
-E 使用ERE,相当于egrep
-F 不支持正则表达式,fgrep
-f file根据模式,处理两个文件相同内容 把第一个文件作为匹配条件
-r 递归目录,但不处理软链接
-R 递归目录,但处理软链接

正则表达式(拓展)、grep(拓展)和sed_第1张图片

  统计当前主机的连接状态 

  统计当前连接主机数

三、sed

  sed是行编辑器,和vi不同的是,sed是读取一行,处理一行,输出一行;而vi是将整个文件放到内存里打开。前者基本无视文件内容的大小,后者要注意自身内存是否能够涵盖住文件大小。

  格式:sed [选项]... {脚本(如果没有其他脚本)} [输入文件]...

  3.1 基本用法

    sed [option]...            'script;script;...'                 [input  file...]
        选项                          自身脚本语法               支持标准输入管道

选项 功能
-n 不输出模式空间到屏幕,即不自动打印
-e 多点编辑[root@www data]#sed -n -e '/^r/p' /etc/passwd

-f

FILE从指定文件中读取编辑脚本
-r、-E 使用扩展正则表达式
-i.bak 备份文件并原处编辑

正则表达式(拓展)、grep(拓展)和sed_第2张图片

正则表达式(拓展)、grep(拓展)和sed_第3张图片

  3.2 sed脚本语法格式

    语法:地址+命令

     1. 不给地址:给全文进行处理

     2.单地址

       #:指定的行  $:最后一行

      /pattern/:该此处模式所能匹配到的每一个行

    3.地址范围

      #,#:从#行到第#行。举例:3,6代表从第3行到第6行

      #,+#:从#行到第+#行。举例:3,+4代表从第3行到第7行

    4.步行:~

      1~2  奇数步

      2~2  偶数步

命令 注释
p 打印当前模式空间内容,追加到默认输出之后
Ip 忽略大小写输出
d 删除模式空间匹配的行,并立即启动下一轮循环
a [\text]在指定行后面追加文本,支持使用\n实现多行追加
i [\text]在行前面插入文本
c [\text]替换行为单行文本或多行文本
w file保存模式匹配的行至指定文件
r file读取指定文件的文本至模式空间中匹配到的行号
= 为模式空间的行打印行号
! 模式空间中匹配行取反处理
q 结束或退出sed

正则表达式(拓展)、grep(拓展)和sed_第4张图片

正则表达式(拓展)、grep(拓展)和sed_第5张图片

  另外它还支持正则表达式

    自动打印需要打印否则会全部打印,如图所示 正则表达式(拓展)、grep(拓展)和sed_第6张图片

    正确结果应该如下图所示

正则表达式(拓展)、grep(拓展)和sed_第7张图片

正则表达式(拓展)、grep(拓展)和sed_第8张图片

    匹配两个正则表达式的行

      基本格式: '/表达式1/,/表达式2/p'  文件名

正则表达式(拓展)、grep(拓展)和sed_第9张图片

    匹配方式

  1.       先开始找b开头一直找到f开头
  2.       然后再重新找b开头,一找到f开头,没有f开头就全显示
  3.       重复循环

    奇偶数表示

正则表达式(拓展)、grep(拓展)和sed_第10张图片

    选项-d:删除

    修改文件内容,常常用于修改配置文件

    -i和-i.bak的区别

      -i:修改文件

      -i.bak:修改文件前先备份

正则表达式(拓展)、grep(拓展)和sed_第11张图片

正则表达式(拓展)、grep(拓展)和sed_第12张图片

    选项-a:追加 

正则表达式(拓展)、grep(拓展)和sed_第13张图片

正则表达式(拓展)、grep(拓展)和sed_第14张图片

正则表达式(拓展)、grep(拓展)和sed_第15张图片

正则表达式(拓展)、grep(拓展)和sed_第16张图片

正则表达式(拓展)、grep(拓展)和sed_第17张图片

正则表达式(拓展)、grep(拓展)和sed_第18张图片

正则表达式(拓展)、grep(拓展)和sed_第19张图片

  3.3 搜索替代

    s/pattern/string/修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###
    替换修饰符:
      g 行内全局替换
      p 显示替换成功的行
      w   /PATH/FILE 将替换成功的行保存至文件中
      I,i   忽略大小写

    内容较长就不展示了

    正则表达式(拓展)、grep(拓展)和sed_第20张图片

    提取版本号

[root@localhost /]#cat 1.txt | grep -e "[0-9]\+\."
ant-1.9.7.jar
ant-launcher-1.9.7.jar
antlr-2.7.7.jar
antlr-runtime-3.4.jar
aopalliance-1.0.jar
archaius-core-0.7.6.jar
asm-5.0.4.jar
aspectjweaver-1.9.5.jar
bcpkix-jdk15on-1.64.jar
bcprov-jdk15-1.46.jar
bcprov-jdk15on-1.64.jar
checker-compat-qual-2.5.5.jar

[root@localhost /]#cat 1.txt |sed -r 's/.*-(.*)\.jar/\1/'
1.9.7
1.9.7
2.7.7
3.4
1.0
0.7.6
5.0.4
1.9.5
1.64
1.46
1.64
2.5.5

  3.4 变量

正则表达式(拓展)、grep(拓展)和sed_第21张图片

  3.5 改配置文件

正则表达式(拓展)、grep(拓展)和sed_第22张图片

  3.6 修改网卡名

正则表达式(拓展)、grep(拓展)和sed_第23张图片

正则表达式(拓展)、grep(拓展)和sed_第24张图片

你可能感兴趣的:(正则表达式)