如何在使用bash后找到空行

时间:2013-03-09 20:08:25

标签: regex bash scripting grep find

我正在尝试使用bash脚本来识别我的代码中在关闭后有多个空行的地方}

我可以使用此脚本搜索和查找文本:

TAGS="text"
find "${SRCROOT}" \( -name "*.h" -or -name "*.m" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "\$match = 1 if s/($TAGS)/ error: \$1/; END { exit \$match; }" 

但是我不确定如何搜索关闭}字符后出现的空行。我需要某种正则表达式吗?

有人可以帮我把这些碎片装在一起吗?

修改

为了澄清,实际上只有在找到}之后有多个空行的位置才真正有用。

1 个答案:

答案 0 :(得分:1)

试试这个单行:

 awk '/}/{f=1;next} $0 && f{f=0;next} !$0 && f{print "empty line found:"NR}' file

我们举一个例子:

kent$  nl -ba file
     1  foo
     2  bar}
     3  
     4  foo2
     5  
     6  
     7  bar2{
     8  
     9  }
    10  
    11  
    12  
    13  eof

kent$  awk '/}/{f=1;next} $0 && f{f=0;next} !$0 && f{print "empty line found:"NR}' file
empty line found:3
empty line found:10
empty line found:11
empty line found:12

修改

肮脏而快速的新更新问题:

     awk '/}/{f=1;m=0;next} $0 && f{f=0;m=0;next} !$0 && f &&!m{m=1;next} m{print "empty line found:"NR}' file

新测试:

kent$  nl -ba file                                                                                              
     1  foo
     2  bar}
     3  
     4  foo2
     5  
     6  
     7  bar2{
     8  
     9  }
    10  
    11  
    12  
    13  blah{}
    14  
    15  
    16  
    17  
    18  eof

kent$  awk '/}/{f=1;m=0;next} $0 && f{f=0;m=0;next} !$0 && f &&!m{m=1;next} m{print "empty line found:"NR}' file
empty line found:11
empty line found:12
empty line found:15
empty line found:16
empty line found:17