Wie passen die neuen Linien in awk?
Input-Datei text.txt:
foo()
{
}
buz()
{
}
Awk script.awk
:
BEGIN {
RS = "\n\n+";
FS = "\n";
}
/[a-z]+\(\)\n/ {print "FUNCTION: " $1;}
{print "NOT FOUND: " $0;}
Skript ausführen:
awk -f script.awk text.txt
gibt:
NOT FOUND: foo()
{
}
NOT FOUND: buz()
{
}
Aber ich habe erwartet, passen beide Funktionen MIT newlines. Wie Sie dies tun?
Welche version von awk verwenden Sie?
InformationsquelleAutor egor7 | 2012-03-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie versuchen, diese:
Wenn Sie möchten, um zu überprüfen, dass es nichts gibt, nach dem () Sie können dies tun:
$1~/[a-z]+()$/{print "FUNKTION:" $1;}
Ich weiß nicht, warum newline ist nicht abgestimmt. Vielleicht hat jemand würde es erklären.
RS = ""
undRS = "\n\n+"
sind die gleichen, aber Sie sind nicht, wie Sie schon oben erwähnt. Aber warum..InformationsquelleAutor Eran Ben-Natan
Da hast du schon mit "\n" als die FS, Sie können nur tun, Abgleich gegen $1:
Dieser arbeitete mit gawk:
\n
. In deinem Beispiel gibt es keine\n
am Ende der regexp.Sie sind mit newline als Ihre Feld-Trennzeichen. Warum willst du nicht nutzen?
InformationsquelleAutor glenn jackman
Könnte dies für Sie arbeiten (GNU awk):
\n
. In deinem Beispiel gibt es keine\n
am Ende der regexp.Oops! vergessen Sie die neue! Lösung geändert.
InformationsquelleAutor potong
Nicht sicher, welche Leistung Sie zu erwarten excactly.
In der Abwicklung der FS in awk müssen Sie indroduce ein dummy-Befehl wie $1=$1. Ohne Sie nicht eingereicht-Analyse wird durchgeführt.
Also, wenn Sie erwarten, dass das Ergebnis so:
Geben Sie einfach:
InformationsquelleAutor huncut