如何让awk的gsub匹配到指定字符首次出现而非最后一次以删除首个HTML标签
awk删除行首首个HTML标签的解决方案
问题根因
- 正则中
.*默认使用贪婪匹配规则,会尽可能匹配最长的符合条件的内容,因此你写的^<.*>会从行首第一个<开始,一直匹配到整行最后一个>为止,把中间所有内容全部删除,最终仅剩下末尾的x。 - 你使用的
gsub是全局替换函数,而你的需求仅需要删除1次行首的标签,用sub函数更适配需求。
正确实现代码
awk '{sub(/^<[^>]*>/,""); print}' file.txt
规则说明
[^>]是正则排除字符集,代表匹配所有不等于>的字符,因此匹配过程碰到第一个>就会终止,不会跨标签匹配后续的内容^<[^>]*>可以精准匹配行首第一个完整的<>格式标签sub函数仅替换第一个匹配到的内容,刚好符合仅删除首个标签的要求
输出效果
运行上述代码后,得到的输出和你预期一致:
fruit</div></td>x banana</span>x apple</td>x
内容的提问来源于stack exchange,提问作者Ahmet Said Akbulut
相关产品推荐
相关产品推荐

