如何在awk中匹配新行?

ego*_*or7 3 awk

输入文件 text.txt:

foo()
{
}

buz()
{
}
Run Code Online (Sandbox Code Playgroud)

script.awk

BEGIN {
    RS = "\n\n+";
    FS = "\n";
}
/[a-z]+\(\)\n/ {print "FUNCTION: " $1;}
{print "NOT FOUND: " $0;}
Run Code Online (Sandbox Code Playgroud)

运行脚本:

awk -f 脚本.awk 文本.txt

给出:

NOT FOUND: foo()
{
}
NOT FOUND: buz()
{
}
Run Code Online (Sandbox Code Playgroud)

但我希望将这两个函数与换行符匹配。这该怎么做?

gle*_*man 5

由于您已经使用 "\n" 作为 FS,您可以只对 $1 进行匹配:

awk -v RS='\n\n+' -v FS='\n' '
  $1 ~ /^[a-z]+\(\)$/ {print "FUNCTION: " $1; next}
  {print "NOT FOUND: " $0}
' text.txt
Run Code Online (Sandbox Code Playgroud)

这适用于gawk:

FUNCTION: foo()
FUNCTION: buz()
Run Code Online (Sandbox Code Playgroud)