【Shell】sed 同时匹配多个模式

之前在 【Linux】sed 命令最全解析 这篇文章中有提到,使用 sed 实现多个匹配的方法,但是写的并不全,在此重新补充一下。

sed 命令功能非常强大,通常用于匹配和编辑文本。

默认情况下,一条 sed 命令只能匹配一个模式(模式即匹配规则的意思)。

怎么用 sed 实现在一条命令中匹配多个模式呢?

有如下几种方式:

  • 通过 -f 指定脚本文件,在文件中集合多条指令,这里不再赘述啊;
  • 通过管道符|连接多条 sed 指令;
  • 在一条 sed 指令中使用多个 -e选项实现。
  • 在一条 sed 指令中使用分号 ; 分隔多个匹配模式。

下面使用如下文本内容来做测试:

$ nl 1.txt 
     1  This is my cat,my cat's name is betty
     2  This is my dog,my dog's name is frank
     3  This is my fish, my fish's name is george
     4  This is my goat,my goat's name is adam

1、管道符方式

直接用管道符连接多个普通的 sed 命令即可。

去掉 1.txt 中第三行及后面的内容,并把 name 替换成 mingzi:
$ nl 1.txt | sed '3,$d' | sed 's/name/mingzi/g'
     1  This is my cat,my cat's mingzi is betty
     2  This is my dog,my dog's mingzi is frank

2、使用多个 -e选项实现

在一条 sed 指令中加上多个 -e 选项来指定多个匹配模式。

去掉 1.txt 中第三行及后面的内容,并把 name 替换成 mingzi:
$ nl 1.txt | sed  -e  '3,$d'  -e  's/name/mingzi/g'   
     1  This is my cat,my cat's mingzi is betty
     2  This is my dog,my dog's mingzi is frank

3、使用 ;实现多个匹配

在一条 sed 指令的匹配模式中,通过 ; 分隔多个匹配项。

  • 分号 ; 后面有没有空格都可以,但是为了美观最好加上。
去掉 1.txt 中第三行及后面的内容,并把 name 替换成 mingzi:
nl 1.txt | sed '3,$d; s/name/mingzi/g'       
     1  This is my cat,my cat's mingzi is betty
     2  This is my dog,my dog's mingzi is frank

以上三种方式的效果是一样的,大家可以比较一下。

你可能感兴趣的:(linux)