我需要修改使用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但没有成功。 有可能??
答案 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等时很了解其他情况。)