我有一个字符串<TH bgcolor=#7070ff>DATAbase</th>
,我想删除bgcolor=#7070ff
之间使用
<TH and >
”
echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed "s/\<TH.*\>/<th>/"
然而,这会产生<th>
而不是<TH> DATAbase </th>
任何人都可以向我解释为什么sed与'&gt;'的第二个实例相匹配请?
阅读sed manual我无法理解!
修改:
echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed 's|\(<TH[^<]*>\)|<th>|g'
这似乎有效,但我不知道为什么......
答案 0 :(得分:1)
你可以试试这个sed命令,
sed 's|<TH[^>]*>|<th>|g' file
<强>示例:强>
如果您想保留第一个<TH>
。
$ echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed 's/^\([^ ]*\)[^>]*\(.*\)$/\1\2/g'
<TH>DATAbase</th>
如果你想用小写字母<TH>
,那就试试吧,
$ echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed 's/^\([^ ]*\)[^>]*\(.*\)$/<th\2/g'
<th>DATAbase</th>
更简单的一个没有捕获组,
$ echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed 's|<TH[^>]*>|<th>|g'
<th>DATAbase</th>
<强>解释强>
<TH[^>]*>
将<TH
到下一个>
字符的字符匹配零次或多次,后跟符号>
。所以它匹配字符串<TH bgcolor=#7070ff>
。此匹配的字符串已替换为<th>
。 答案 1 :(得分:0)
尝试:
echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed "s/<TH[\w =#[:alnum:]]*>/<th>/"