【发布时间】:2020-09-25 15:13:22
【问题描述】:
一些 Markdown 处理器在项目符号列表之前需要一个空行。
所以列表
This is a bulleted list:
- line 1
- line 2
- line 3
会被错误地渲染为
This is a bulleted list: - line 1 - line 2 - line 3
如何使用 awk 来检查以“-”开头的行前面是否有空行或以“-”开头的另一行?
(我使用破折号作为开始标记,以避免与文档前面的内容混淆,它使用三个破折号作为分隔符。)
请注意:与 cmets 中引用的第一个问题不同,这是对反模式的搜索 - 文件中不会发生的事情。
使用pcregrep 这很简单:
pcregrep -Mc '^[A-Z][a-z].*\n- ' $filename
但我不清楚如何使用awk。
我正在做的是:
awkcommand='
/- / {
if(lastLine != "") {
print FILENAME
exit
}
}
{ lastLine = $0 }
'
awk "$awkcommand" data
在非空行之后捕获单个项目符号。但是当我尝试添加更多条件时(如果前一行不是空白且前一行不是以项目符号开头),它会失败 - 例如,这个:
if(lastLine != "" && lastline !~/^- /) {
不起作用:它对该文件给出了误报
This is a test
- abc
- def
【问题讨论】:
-
它可以简化为单行,但这里接受的答案很好地解释了它:stackoverflow.com/questions/14350856/…
-
这与人们所说的重复它的问题相反。我们正在寻找一种反模式,而不是一种模式。
-
您可以使用逻辑运算符来获得所需的结果。。我没有投票结束这个问题,但您被否决且未回答的可能原因是因为您没有添加自己的努力对问题
-
您的 awk 工作正常,刚刚经过测试,包括
if(lastLine != "" && lastline !~/^- /) {您得到的输出是否与打印的文件名不同? -
似乎只是一个错字。将
lastline替换为lastLine
标签: awk