Ich habe ein AWK-Skript, das eine Datei Zeile für Zeile durchläuft und verschiedene Dinge mit dem, was es findet, die alle gut funktionieren. Vor kurzem wurde festgestellt, dass einige Zeilen ignoriert werden müssen, dass alle das FormatEinfache Whitespace-Check in AWK Regex funktioniert nicht
FOO_.....
Also brauche ich Leerzeichen übereinstimmen FOO_
folgen. Es gibt auch Linien, die ich nicht übereinstimmen möchte, dass gehen
BAR_... FOO_...
So muss das Spiel Start der Zeile sein. Das sollte alles sehr einfach sein und ich richte es schnell ein
if($0 ~ /^\s*FOO_/)
{
continue;
}
Leider funktionierte das oben genannte nicht. Ich habe versucht, viele Kontrollen, bis ich endlich in der Lage war, diese
zu arbeitenif($0 ~ /^ *\t*FOO_/)
{
continue;
}
So \s*
nicht aus irgendeinem Grund zu bekommen nicht korrekt Leerzeichen übereinstimmen, aber *\t*
(ein oder mehr Platz, ein oder mehrere Register) funktioniert . Die zweite Funktion bedeutet, dass alles, was vorhanden ist, entweder ein Leerzeichen oder ein Tab ist, was beide unter \s
behandelt werden sollten, also bin ich mir wirklich nicht sicher, warum die \s
nicht funktioniert.
Ich kann es mit der anderen Option arbeiten, aber es ist nicht ideal, und ich bin nur neugierig, was dieses Problem verursachen könnte.
ich hätte schwören können wir andere awk-Skripte hatte, dass die 'verwendet \ s, aber es ist möglich, ich denke nur an verschiedene Regex, die nicht in awk getan wird. Dies könnte sehr wohl das Problem sein. –
Wenn dies nicht der Fall ist, gibt es noch etwas anderes über Ihre Eingabedaten oder Ihr Skript als das, was Sie uns in der Frage gezeigt haben. Siehe http://stackoverflow.com/help/someone-answers für was zu tun ist, wenn dies Ihre Frage beantwortet hat. Sie sollten wirklich zu 'gawk' wechseln, und dann wird nicht nur' \ s' funktionieren, sondern Sie werden eine Tonne extrem nützlicher zusätzlicher Funktionalität bekommen. –