版权声明:原创不易,未经作者允许请勿随意转载!因个人能力和精力有限,难免有疏漏和不足之处,欢迎指正,谢谢~ https://blog.csdn.net/lijing742180/article/details/85176056
之前在 【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
以上三种方式的效果是一样的,大家可以比较一下。