2010-08-19 168 views
1

我的HTML代碼包含以下行。替換html標記

<TH>column1</TH><TH>column2</TH><TH>column3</TH> 

我可以使用SED工具與「名」來代替列1,列2以「姓」 ......

<TH>Name</TH><TH>Surname</TH><TH>City</TH> 

我已經列在我的shell的echo語句列表腳本。

echo 'Name, Surname, City' 

這3個值需要在HTML代碼的相應列中進行替換。列數可能會改變。

回答

3

您可以更改新列名的輸入格式,還是您堅持使用echo。表格標題行是否每個html文件出現一次,或多次?

對於您目前的情況,這會工作:

echo 'Name, Surname, City' | 
awk -F'<TH>|</TH><TH>|</TH>' 'NR==1{n=split($0,a,", *");OFS="";next}/<TH>/{for(i=1; i<=n;i++)$(i+1)="<TH>"a[i]"</TH>"}1' - file.html 

輸出:

<TH>Name</TH><TH>Surname</TH><TH>City</TH> 

注意,事情會去可怕的錯誤,當你輸入HTML有不同的形式(額外或丟失換行符) 。如果你想做更高級的事情,你應該使用適當的SGML解析器而不是awksed

+0

謝謝。但是,如何用新內容替換文件? sed有-i開關。 AWK? – shantanuo 2010-08-20 03:28:36

+0

@shantanuo Awk沒有'-i'開關。執行此操作的標準方法(如在大多數UNIX程序中)就像'awk'[old] .html> new.html && mv new.html old.html'。 – schot 2010-08-20 07:32:22

0

把你替換成變量而不是做迴音,後來乾脆

sed 's|<TH>column1<\/TH>|<TH>Name</TH>|;s|<TH>column2</TH>|<TH>Surname</TH>|;s|<TH>column3</TH>|<TH>City</TH>|' file 

注意,這不,如果你的圖案跨度多行傻瓜證明。但是,如果所有需要替換的東西都在一條線上,那麼它應該沒問題。