输入文件text.txt:
foo()
{
}
buz()
{
}
Awk script.awk
:
BEGIN {
RS = "\n\n+";
FS = "\n";
}
/[a-z]+\(\)\n/ {print "FUNCTION: " $1;}
{print "NOT FOUND: " $0;}
运行脚本:
awk -f script.awk text.txt
给出:
NOT FOUND: foo()
{
}
NOT FOUND: buz()
{
}
但是我希望将两个函数与换行符匹配。怎么做?
答案 0 :(得分:4)
由于你已经使用“\ n”作为FS,你可以只对$ 1进行匹配:
awk -v RS='\n\n+' -v FS='\n' '
$1 ~ /^[a-z]+\(\)$/ {print "FUNCTION: " $1; next}
{print "NOT FOUND: " $0}
' text.txt
这适用于gawk:
FUNCTION: foo()
FUNCTION: buz()
答案 1 :(得分:3)
这可能适合你(GNU awk):
awk '{if(/^[a-z]+\(\)\n/)print "FUNCTION:"$1; else print "NOT FOUND: "$0}' RS="" file
答案 2 :(得分:2)
你可以试试这个:
BEGIN {
RS = "";
FS = "\n";
}
/[a-z]+\(\)/ {print "FUNCTION: " $1;}
!/[a-z]+\(\)/ {print "NOT FOUND: " $0;}
如果你想验证()后面没有任何内容,你可以这样做:
$ 1~ / [a-z] +()$ / {print“FUNCTION:”$ 1;}
我不知道为什么换行不匹配。也许有人会解释它。
答案 3 :(得分:0)
不确定你想要的输出是什么。
为了在awk中处理FS,你需要产生一个像$ 1 = $ 1这样的虚拟命令。没有它,就不会进行归档解析。
所以,如果你期望这样的结果:
foo() { }
buz() { }
只需输入:
awk '{$1=$1; print} ' RS='\n\n' FS='\n' OFS=" "