我有很多靜態HTML文件,其中包含各種域的鏈接。Sed使用錨文本替換特定域的鏈接
我需要替換特定域的所有鏈接,只用它們的錨文本。
這是我設法想出到目前爲止命令:
sed 's|<a .*example\.com.*>\(.*\)<\/a>|\1|Ig' file.html
,這裏是它如何工作的例子:
這
<p>Some random text <a href="http://example.com/sample_page" title="Example Title">Anchor Text</a> | Some other random text <a href="http://example.org/">Different Anchor Text</a></p>
應成爲這樣:
<p>Some random text Anchor Text | Some other random text <a href="http://example.org/">Different Anchor Text</a></p>
上面的命令在每行只有一個鏈接的情況下效果很好,但是多於一個的時候,無論域只留下最後一個錨文本,它都會將其全部刪除。
我在這裏發現了一些其他類似的主題,但無法適應我的問題的任何解決方案。當然,我可能錯過了一個我沒有嘗試過的解決方案已經存在的話題是完全可能的。如果我沒有足夠清楚地解釋問題,或者我錯過了提供一些重要信息,請告訴我。
//編輯:
與[^>]*
更換.*
和命令看起來像這樣經過:
sed 's|<a .*example\.com[^>]*>\(.*\)<\/a>|\1|Ig' file.html
第一關閉</a>
遺骸和它被從最後一個刪除。
下面是一個例子的結果:
<p>Some random text Anchor Text</a> | Some other random text <a href="http://example.org/">Different Anchor Text</p>
更換.*
與[^<>]*
產生同樣的結果。
用'[^>] *'或'[^ <>] *'替換'。*'。 –
當然。你完好無損地留下了2'。*'。 'sed's | ]*example\.com[^>]*>\([^>]*\) | \ 1 | Ig'file.html'應該可以工作。 –
@WiktorStribiżew - 謝謝你,它完美的作品,你可以張貼它作爲答案,所以我可以接受它。如果沒有太多的麻煩,你能否解釋爲什麼它必須在錨文本區域被替換? –