如何搜索和替换文件中匹配部分的多个模式?我试过这个
sed '/pattern1,pattern2/s/string1/replace1/g;s/string2/replace2/g' file
但它会忽略 pattern1、pattern2 部分,并为我的第二次搜索和替换搜索和替换整个文件。
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
卷发。
作为记录,这是针对您似乎正在使用的GNU sed的。对于其他版本/可移植性,用换行符替换分号。
也/pattern1,pattern2/只是搜索字面上的“pattern1,pattern2”作为单个字符串。
pattern1如果我没看错的话,您想对同时具有和的行进行一些替换pattern2,尽管不一定在任何相对位置。在这种情况下:
sed '
/pattern1/ {
/pattern2/ {
s/string1/replace1/g;
s/string2/replace2/g;
}
}
' file
为了便于阅读,我将它隔开,但如果你真的想的话,你可以把它全部重新组合成一行。
如果您知道 pattern1总是在此之前,pattern2那么您可以使用
sed '/pattern1.*pattern2/ {
s/string1/replace1/g; s/string2/replace2/g;
}' file
但如果它们可以按相反的顺序排列,请使用第一个sed.
另外......也许我们可以得到一个样本文件来测试?这些只是即兴打字,但如果你提供了示例数据,我实际上会先用它来测试它们,然后再提交可能有错字或逻辑缺陷的东西。只是一个建议。如果你不让他们生成所有的碎片,人们将更有可能做到彻底,哈哈