代码之家  ›  专栏  ›  技术社区  ›  Scott C Wilson Joachim Kiørbye Bertelsen

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

awk
  •  -2
  • Scott C Wilson Joachim Kiørbye Bertelsen  · 技术社区  · 4 年前

    一些降价处理程序要求在项目符号列表前有一个空行。

    所以名单

    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
    
    0 回复  |  直到 4 年前
        1
  •  1
  •   thanasisp Anthony Battaglia    4 年前

    你的剧本还可以,你的附加剧本中只有一个拼写错误 if ,它起作用了。

    awk '/- / {
      if(lastLine != "" && lastLine !~ /^- /) {
        print FILENAME
        exit
      }
    }
    { lastLine = $0 }' file
    
        2
  •  1
  •   Luuk WHIP    4 年前
    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*
    

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