某些 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 一起使用。