首页 > 解决方案 > 如果匹配行,SED 搜索并替换超过 1 个模式

问题描述

如何搜索和替换文件中匹配部分的多个模式?我试过这个

sed '/pattern1,pattern2/s/string1/replace1/g;s/string2/replace2/g' file

但它会忽略 pattern1、pattern2 部分,并为我的第二次搜索和替换搜索和替换整个文件。

标签: bashsed

解决方案


sed 用于对单个字符串执行 s/old/new,仅此而已。假设根据周围的描述,/pattern1,pattern2/您实际上是指/pattern1/,/pattern2/在任何 UNIX 机器上的任何 shell 中的任何 awk:

awk '
/pattern1/ { f=1 }
f {
    gsub(/string1/,"replace1")
    gsub(/string2/,"replace2")
}
/pattern2/ { f=0 }
1' file

推荐阅读