1

我需要修改使用 SED 在文件中搜索和替换的现有脚本。我的问题是我需要使用 sed 进行相同的搜索和替换,但前提是满足 2 个条件。

我使用 find 和 sed 如下:

find . -name 'search.do*' -exec sed -i "/href/\
s/href=\"[^\"]*sommerhus\/detail\.do[^\"]*unitId=\([^\"]*\)\"/href=\"sommerhus-\1.html\"/g" {} \;

但现在我需要确保仅在满足“href”和另一个搜索条件时才进行替换 fx“href”&&“语言”存在

我试过 -e 但没有成功。可能吗 ??

4

1 回答 1

4

您可以使用/href.*language\|language.*href/(可能带有一些额外的约束,例如每次匹配中第二个单词之前的空格)。

您还可以将命令嵌套在块中:

sed '/href/{ /language/s/<match>/<replace>/ }'

这更具扩展性:添加第三个模式只需要添加一对大括号和模式,而上面的交替解决方案总共需要 6 个模式(每个可能的顺序一个)。


此外,为了避免/在模式内部使用反斜杠,sed 允许您使用任何字符作为分隔符,例如@

find . -name 'search.do*' -exec sed -i "/href/\
s@href=\"[^\"]*sommerhus/detail\.do[^\"]*unitId=\([^\"]*\)\"@href=\"sommerhus-\1.html\"@g" {} ;'

(在这种情况下是一个小收获,但在处理文件路径或 URL 等时很高兴知道其他情况。)

于 2012-06-21T08:29:47.653 回答