我正在尝试获取一个sed
命令来格式化(HTML)纯文本输入中每个单词的前两个字母。我想输入纯文本并用标签将前两个字母标记为粗体,<b>
以形成一个 html 文件,该文件表示相同的文本,但格式如下所示:
https://www.reddit.com/media?url=https%3A%2F%2Fi.redd.it%2Fzwp75sv6dgqb1.png
不幸的是,我无法获取前两个字母,但它只适用于第一个字母。所以我得到了这个:
sed -e 's/\(\b\w{1,2}\)/<b>\1<\/b>/g' test.txt > test.html
但它没有按预期工作
input: this is a test
output: this is a test
intended: <b>th</b>is <b>is</b> <b>a</b> <b>te</b>st
我不知道为什么,但是这个命令确实只标记了第一个字母:
sed -e 's/\(\b\w\)/<b>\1<\/b>/g' test.txt > test.html
为什么不是另一个我将 \w(ord 字符)标记为 {1,(or)2} 次的情况,尽管 regex101 告诉我我应该是正确的(https://regex101.com/r/hBb6Yt/4)?
答案1
喜欢(capturegroup)
,{min,max}
是扩展的正则表达式功能并且必须用反斜杠括起来,sed
除非您sed
有并使用扩展正则表达式的选项(GNU -E -r --regexp-extended
;BSD/Mac?-E
)。另外,您在这里不需要捕获组:
sed -e 's/\b\w\{1,2\}/<b>&<\/b>/g' in >out
sed -Ee 's/\b\w{1,2}/<b>&<\/b>/g' in >out