如何替换html标签之间的任何文本

时间:2017-06-05 12:53:10

标签: bash shell sed replace grep

我在html标签之间有文字。例如:

<td>vip</td>

我会在代码<td></td>之间添加任何文字 如何从这些标签中剪切任何文本并在这些标签之间放置任何文本。 我需要通过bash / shell来做。 我怎样才能做到这一点 ? 首先,我试图得到这个文本,但没有成功 sed -n "/<td>/,/<\/td>/p" test.txt。但结果我有 <td>vip</td>。但根据文件,我应该只得到vip

4 个答案:

答案 0 :(得分:3)

您可以使用它来获取值vip

sed -e 's,.*<td>\([^<]*\)</td>.*,\1,g'

答案 1 :(得分:2)

你可以试试这个:

sed -i -e 's/\(<td>\).*\(<\/td>\)/<td>TEXT_TO_REPLACE_BY<\/td>/g' test.txt

请注意,它仅适用于<td>代码。它将替换标记<td>之间的所有内容(实际上将它们放在一起并将标记放回)与TEXT_TO_REPLACE_BY

答案 2 :(得分:0)

如果您的Input_file与显示的示例相同,那么以下内容也可以为您提供帮助。

echo "<td>vip</td>" | awk -F"[><]" '{print $3}'

只需使用echo打印标签,然后使用awk创建字段分隔符&gt;&lt;然后打印第3个字段,然后是您的请求。

答案 3 :(得分:0)

d=$'<td>vip</td>\n<table>vip</table>\n<td>more data here</td>'
echo "$d"
<td>vip</td>
<table>vip</table>
<td>more data here</td> 

awk '/<td>/{match($0,/(<.*>)(.*)(<\/.*>)/,t);print t[1] "something" t[3];next}1' <<<"$d"
<td>something</td>
<table>vip</table>
<td>something</td>

awk '/<table>/{match($0,/(<.*>)(.*)(<\/.*>)/,t);print t[1] "something" t[3];next}1' <<<"$d"
<td>vip</td>
<table>something</table>
<td>more data here</td>