Linux

使用 sed(或任何有用的東西)用相對內容替換字元串

  • March 20, 2017

通常要跨多個文件替換字元串,只需使用

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>
...

""它用相對於它的幾個字元的字元串替換雙引號。

以下範例應該適合您。

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

它首先擷取由變數表示的 a 標籤之間的文本\1。然後使用結果字元串中的變數。

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

使用lookbehind 和lookahed at""並根據前瞻擷取在這些雙引號內插入必要的字元串。

引用自:https://unix.stackexchange.com/questions/352524