我正在尋找一種方法來用另一個替換 HTML 標記,但保留文本。
我有一個很大的 HTML 檔案,其中包含:
<span >fork</span>
我想用標簽替換<span>標簽<strong>:
<strong>fork</strong>
工具并不重要,但我正在尋找一種 CLI 方式來做到這一點。
我不是在尋找 HTML 處理器,因為輸入是一個包含一些 HTML 代碼的文本檔案(不是干凈/有效的 HTML),我正在手動處理輸出(復制、修改、稍后在其最終位置使用)。我只是想通過替換節省一些時間。
uj5u.com熱心網友回復:
我會sed按照以下方式使用 GNU 來完成這項任務,讓file.txt內容成為
<span >fork</span>
然后
sed -e 's/<span[^>]*>/<strong>/g' -e 's/<\/span>/<\/strong>/g' file.txt
輸出
<strong>fork</strong>
說明:先用 代替span開始<strong>,再用 代替span結束</strong>。
uj5u.com熱心網友回復:
考慮使用 Python 和 BeautifulSoup 之類的工具來處理 HTML。嘗試使用其他工具決議 HTML,例如sedorawk可能會導致可怕的地方。
舉個例子:
from bs4 import BeautifulSoup
soup = BeautifulSoup('<li><span >fork</span>')
for spanele in soup.findAll('span'):
spanele.name = 'p'
html_string = str(soup)
print(html_string);
這是輕量級且非常簡單的,并且使用專門為決議它而構建的庫可以正確處理 html。
uj5u.com熱心網友回復:
不要使用 AWK 處理 HTML 檔案。如果可以將 HTML 檔案轉換為 XHTML 檔案,則可以使用 xsltproc 進行 XML 轉換,如下所示:
trans.xsl 檔案:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="utf-8"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="span[@class='desc e-font-family-cond']">
<strong><xsl:apply-templates/></strong>
</xsl:template>
</xsl:stylesheet>
用于呼叫 xsltproc 的 CLI 命令,顯然必須安裝:
xsltproc trans.xsl file.html
此命令的標準輸出是您想要的更正后的 HTML 檔案。
uj5u.com熱心網友回復:
使用 sed:
sed 's,<\(\/\)\?span\(\s\)\?,<\1strong\2,g'
$ echo '<span >fork</span>' | sed 's,<\(\/\)\?span\(\s\)\?,<\1strong\2,g'
<strong class="desc e-font-family-cond">fork</strong>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/418031.html
標籤:
