使用 awk 在 markdown 中的项目符号列表之前检查空行



某些 Markdown 处理器需要在项目符号列表之前使用空行。

所以列表

This is a bulleted list: 
- line 1
- line 2
- line 3

将被错误地呈现为

This is a bulleted list: - line 1 - line 2 - line 3

如何使用 awk 检查以"-"开头的行前面是否有空行或以"-"开头的另一行?

(我使用破折号空格作为开始标记,以避免与文档封面混淆,后者使用三个破折号作为分隔符。

请注意:与评论中引用的第一个问题不同,这是对反模式的搜索 - 文件中没有发生的东西。

使用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

您的脚本还可以,您的附加if中只有一个拼写错误,它有效。

awk '/- / {
if(lastLine != "" && lastLine !~ /^- /) {
print FILENAME
exit
}
}
{ lastLine = $0 }' file
gawk '/^-/{ if (bl==pbl) bl=1; else { pbl=bl; bl=0; }}
{ if (bl==1) print ""; 
print $0 }'  inputfile

给定输入文件:

This is a bulleted list:
- line 1
- line 2
- line 3

输出将是:

This is a bulleted list:
- line 1
- line 2
- line 3

编辑:

如果您只想打印文件名:

awk '/^-/{ if (bl==pbl) bl=1; else { pbl=bl; bl=0; }}
{ if (bl==1) print FILENAME; }'    inputfiles*

在这种情况下,没有使用需要 gawk 的特殊东西,所以它也应该与 awk 一起使用。

最新更新