在sed中替换搜索字符串中的字符串

时间:2013-09-23 07:00:41

标签: regex string replace sed

我有一个带有html内容的.sql转储。我想从<img...>字符串中删除title =“....”。 棘手的部分是这些title =“.....”als出现在一行的<href.....>部分。

为了使其更加可见,我在2行文件中使用以下字符串:

A B C D B C A B C
Y B C D B C Y B C

B代表title="...."部分,A....C代表<img....>部分

生成的文件应该看起来像

A C D B C A C
Y B C D B C Y B C

只应在B内删除A...C,并且不应触及第二行

我正在使用sed,因为我知道这个最好,但如果有人知道更好的方式我有兴趣知道。

直到现在我已经使用了以下命令

cat file |sed '/A/ s/B/X/g'

问题是它还取代了B

中的D...C
A C D C A C
Y B C D B C Y B C

任何想法都会得到满足。

的问候,

阿尔扬

PS:现实生活中的例子,只有一行:

nbsp;</p><p> <img src="images/vlaggen/dene_vlag.png" border="0" alt="Vlag van Denemarken" title="REMOVE THIS TITLE" width="75" height="50" align="left" />  <a href="images/hov.png" target="_blank" title="DONT REMOVE THIS TITLE"><img src="images/small.png" border="0" alt="Kaart van Denemarken" title="REMOVE THIS TITLE" align="right" /></a>   <br /><br /> </p><p>&nbsp;</p><h1>Title of page</h1>

2 个答案:

答案 0 :(得分:0)

我认为你想要的是一个非贪婪的正则表达式,这是一种不支持的东西。但是,this question提供了一种潜在的解决方案。我没有对此进行过测试,但也许以下几行有助于:

perl -pe 's|<img(.*?)title=".*?"(.*?)>|<img\1\2>|g'

我现在很早,但其中的要点是“找到img标签,捕获所有不属于title属性的内容,并在最后替换它。

答案 1 :(得分:0)

我确定我的问题是否正确......但我认为你需要反向引用,尝试这样的事情:

sed 's/\(A\) B \(C\)/\1 \2/g'

结果:

A C D B C A C

Y B C D B C Y B C