我的HTML代码包含以下内容。
<TH>column1</TH><TH>column2</TH><TH>column3</TH>
我可以使用sed工具将column1替换为“Name”,将column2替换为“Surname”......
<TH>Name</TH><TH>Surname</TH><TH>City</TH>
我有shell脚本的echo语句中的列列表。
echo 'Name, Surname, City'
这三个值需要在HTML代码的相应列中替换。列数可能会更改。
答案 0 :(得分: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解析器,而不是awk
或sed
。
答案 1 :(得分:0)
将替换放入变量而不是回声,然后只需
sed 's|<TH>column1<\/TH>|<TH>Name</TH>|;s|<TH>column2</TH>|<TH>Surname</TH>|;s|<TH>column3</TH>|<TH>City</TH>|' file
注意,如果您的模式跨越多行,这不是万无一失的。但如果你需要更换的所有东西都在一条线上,那么它应该没问题。