使用 sed (或任何有用的东西)用相对内容替换字符串

使用 sed (或任何有用的东西)用相对内容替换字符串

通常要替换多个文件中的字符串,只需使用

sed -i 's/string1/string2/g' *

但是,我如何使用该sed命令(或任何真正有效的命令)将字符串替换为与其相关的内容。例如:

<td><a href="">a</a></td>
<td><a href="">abbr</a></td>
<td><a href="">address</a></td>
<td><a href="">area</a></td>
...

使用上面的例子,我可以用什么来替换文本,结果如​​下:

<td><a href="HTML-EX/html/a.html">a</a></td>
<td><a href="HTML-EX/html/abbr.html">abbr</a></td>
<td><a href="HTML-EX/html/address.html">address</a></td>
<td><a href="HTML-EX/html/area.html">area</a></td>
...

""它用与其相关的几个字符的字符串替换双引号。

答案1

以下示例应该适合您。

sed 's#<a href="">\(.*\)</a>#<a href="HTML-EX/html/\1.html">\1</a>#'

它首先捕获 a 标记之间的文本,该文本由变量表示\1。然后在结果字符串中使用该变量。

答案2

perl -i -pe 's|<a\hhref=\K "" (?=>([^<]+)</a>)|"HTML-EX/html/$1.html"|gx' *

使用lookbehind 和lookahed at "",并根据lookahead 捕获在这些双引号内插入必要的字符串。

相关内容