当前位置:   article > 正文

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

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

一、正则表达式

  egrep默认使用的是扩张正则

  表示次数

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

  表示分组

()分组将多个字符捆绑在一起当作一个整体处理
\1、\2后向引用
|或者
a|ba或者b
C|catC或cat
(C|c)atCat或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静默模式,不输出任何模式,用途写脚本
-Aafter,后#行
grep -A3 root /etc/passwd匹配到行后3行显示出来
-Bbefore,前#行
-Ccontext,前后各#行
-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
-ffile根据模式,处理两个文件相同内容 把第一个文件作为匹配条件
-r递归目录,但不处理软链接
-R递归目录,但处理软链接

  统计当前主机的连接状态 

  统计当前连接主机数

三、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备份文件并原处编辑

  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]替换行为单行文本或多行文本
wfile保存模式匹配的行至指定文件
rfile读取指定文件的文本至模式空间中匹配到的行号
=为模式空间的行打印行号
!模式空间中匹配行取反处理
q结束或退出sed

  另外它还支持正则表达式

    自动打印需要打印否则会全部打印,如图所示 

    正确结果应该如下图所示

    匹配两个正则表达式的行

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

    匹配方式

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

    奇偶数表示

    选项-d:删除

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

    -i和-i.bak的区别

      -i:修改文件

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

    选项-a:追加 

  3.3 搜索替代

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

    内容较长就不展示了

   

    提取版本号

[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 变量

  3.5 改配置文件

  3.6 修改网卡名

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/131103
推荐阅读
相关标签
  

闽ICP备14008679号