如何使用sed为每个单词的前两个字母添加HTML粗体标签?
如何使用sed为每个单词的前两个字母添加HTML粗体标签?
哈哈,我太懂你遇到的这个坑了!你写的正则逻辑本身没问题,但sed默认用的是基础正则表达式(BRE),和你常用的扩展正则(ERE)规则不一样——在BRE里,像{1,2}这种量词是需要转义的,不然sed会把{和}当成普通字符处理,自然匹配不到内容啦。
你之前的单个字母命令能生效,是因为\w后面没有量词,不需要转义,BRE能正常识别单个单词字符。
解决方法有两种,选哪个都行:
方法1:给BRE里的量词转义
把{1,2}改成\{1,2\},命令就变成:
sed -e 's/\(\b\w\{1,2\}\)/<b>\1<\/b>/g' test.txt > test.html
方法2:启用扩展正则表达式(ERE)
用-E选项让sed切换到ERE模式,这样就不用转义{}和括号了,命令更简洁:
sed -E 's/\b(\w{1,2})/<b>\1<\/b>/g' test.txt > test.html
用这两个命令测试你的输入this is a test,就能得到你想要的结果:
<b>th</b>is <b>is</b> <b>a</b> <b>te</b>st
另外补充一点:如果你的文本里有特殊单词(比如带连字符的),可能需要调整\b的匹配逻辑,但针对普通空格分隔的单词,上面的命令完全够用~
备注:内容来源于stack exchange,提问作者roediGERhard
相关产品推荐
相关产品推荐

