使用sed命令和regexp查找并替换

时间:2015-02-02 16:22:13

标签: regex linux sed command

您好我尝试使用此命令查找并将link rel标记替换为文件:

sed 's/(<link\b.+href=\")(?!http)([^\"]*)(\".*>)/someText/g'  www/file.html

但它不起作用,有人可以帮助我吗? 谢谢 我想做的一个例子是:

替换所有这些链接标签:

 <!-- Common app CSS -->
<link rel="stylesheet" type="text/css" href="less/med.ui.css" />
<link rel="stylesheet" type="text/css" href="less/timeline.css" />
<link rel="stylesheet" type="text/css" href="less/animate.min.css" />
<link rel="stylesheet" type="text/css" href="less/magic.min.css" />

<!-- Common UI CSS -->
<link rel="stylesheet" type="text/css" href="js/app/common/less/common.css" />
<link rel="stylesheet" type="text/css" href="less/sidebar.css" />

<!-- Specific App CSS -->
<link rel="stylesheet" type="text/css" href="js/app/timeline/less/timeline.css" />

只有这一行:

<link rel="stylesheet" type="text/css" href="js/app/globa/less/global.css" />

3 个答案:

答案 0 :(得分:1)

由于sed不支持外观,我建议你改用Perl。

perl -pe 's~(<link\b.+href=\")(?!http)([^\"]*)(\".*>)~\1js/app/globa/less/global.css" />~g' www/file.html

保存所做的更改。

perl -i -pe 's~(<link\b.+href=\")(?!http)([^\"]*)(\".*>)~\1js/app/globa/less/global.css" />~g' www/file.html

答案 1 :(得分:0)

使用sed执行此操作

sed -i backup.bak '/<link\b.\+href=\"/{/href="[^"]*http/!{s#\(<link .\+href="\).*#\1js/app/globa/less/global.css" />#}}' www/file.html

编辑:

sed -i backup.bak '/<link\b.\+href=\"/{
/href="[^"]*http/!{
s#\(<link .\+href="\).*#\1js/app/globa/less/global.css" />#
}
}'

backup.bak是原始文件的备份,扩展名为.bak

答案 2 :(得分:0)

这是最终的解决方案:

perl -i -0777pe 's/(<link\b.+href=\")(?!http)([^\"]*)(\".*?>)/<link rel=\"stylesheet\" type=\"text\/css\" href=\"www\/less\/global_bst.css\" \/>/gs' www/*.html

我希望这段代码对你也有帮助。 非常感谢你的答案。