要求如下:将带星号的文本转换为斜体。不要触碰双星号(粗体)中的文本。使用 sed 命令。例如,
*italic* => <em>italic<\em>
**not italic** => **not italic** (nothing change)
*text**text* => <em>text**<\em>
这是我的命令:
sed -n -r 's#(^|[^*])\*([^*]+)\*#\1<em>\2</\em>#gp' test.txt
它适用于情况 1 和 2,但对于情况 3,它给出了错误的输出:
<em>text <\em>* text*
我该如何让它正常工作?
答案1
问题是*not italic*
是的子字符串**not italic**
,因此根据您的规则,应该是斜体。
我尝试将 regexp(\*((?!\*)(.+?))\*)
与测试程序 check-regexp 一起使用,效果很好,但刚才提到的问题仍然存在。请参阅...
$ check-regexp '(\*((?!\*)(.+?))\*)' '****alpha**beta**gamma***'
searching : ****alpha**beta**gamma***
for the regexp : (\*((?!\*)(.+?))\*)
num of subexps : 3
prefix: ***
what[0]: *alpha*
what[1]: *alpha*
length: 7
what[2]: alpha
length: 5
what[3]: alpha
length: 5
suffix: *beta**gamma***
what[0]: *beta*
what[1]: *beta*
length: 6
what[2]: beta
length: 4
what[3]: beta
length: 4
suffix: *gamma***
what[0]: *gamma*
what[1]: *gamma*
length: 7
what[2]: gamma
length: 5
what[3]: gamma
length: 5
suffix: **
total number of matches: 3
$ check-regexp '(\*((?!\*)(.+?))\*)' '****alpha**'
searching : ****alpha**
for the regexp : (\*((?!\*)(.+?))\*)
num of subexps : 3
prefix: ***
what[0]: *alpha*
what[1]: *alpha*
length: 7
what[2]: alpha
length: 5
what[3]: alpha
length: 5
suffix: *
total number of matches: 1