使用 sed “格式化”每个单词的前两个字母

使用 sed “格式化”每个单词的前两个字母

我正在尝试获取一个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

相关内容