使用具有2个搜索条件的SED

时间:2012-06-21 08:05:34

标签: shell sed

我需要修改使用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”和其他搜索条件f.x“href”&& “语言”存在

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

1 个答案:

答案 0 :(得分: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等时很了解其他情况。)