2012-10-04 68 views
9

/替換HTML標籤我有一個包含行的文件:刪除在bash

<li><b> Some Text:</b> More Text </li> 

我想用破折號刪除HTML標籤和更換</b>標記,這樣就變成這樣:

一些文字: - 更多文字

我正在嘗試使用sed,但是我無法找到正確的正則表達式組合。

回答

14

如果嚴格想要去除所有的HTML標籤,但在同一時間-更換</b>標籤,您可以鏈接兩個簡單的sed命令與管道:

cat your_file | sed 's|</b>|-|g' | sed 's|<[^>]*>||g' > stripped_file 

這將將所有文件的內容傳遞給第一個sed命令,該命令將處理將</b>替換爲-。然後,它的輸出將被傳送到sed,它將用空字符串替換所有HTML標記。最終輸出將被保存到新文件stripped_file中。

使用類似的方法從@Steve對方的回答,您也可以使用sed-e選項鍊表達成單一(非管道命令);加入-i,你也可以讀入並替換原來的文件的內容,而不需要cat,或一個新的文件:

sed -i -e 's|</b>|-|g' -e 's|<[^>]*>||g' your_file 

這將做替換,就像上面的鏈接命令,但是這次它會直接替換輸入文件中的內容。要保存到新文件,請刪除-i並將> stripped_file添加到最後(或您選擇的任何文件名)。使用GNU sed

+0

幫我修復與'變量= 「X」'型文本一些XML文件。使用's /'variable =''[^ \「] * \」//'來匹配標籤名稱和下兩個雙引號之間的所有內容(忽略單引號和轉義雙引號的混合) – cde

+0

推薦cat | sed | sed',然後順便提一句,實際上你所需要的只是'sed'似乎誤導了你。「你也可以」只是不建議有缺陷的方法。 – tripleee

0

方式一:

sed -e 's/<\/b>/-/g' -e 's/<[^>]*>//g' file.txt 

例子:

echo "<li><b> Some Text:</b> More Text </li>" | sed -e 's/<\/b>/-/g' -e 's/<[^>]*>//g' 

結果:

Some Text:- More Text