【Shell】sed 同時匹配多個模式
阿新 • • 發佈:2019-01-01
之前在 【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
以上三種方式的效果是一樣的,大家可以比較一下。