
Ich möchte alle Zeilen in einer Datei abgleichen, bei denen entweder mein Wort ein Präfix ist oder die Zeile ein Präfix meines Wortes ist. Beispielsweise sollte die Suche nach „abc“ zu folgendem Ergebnis führen:
a
ab
abc
abcd
abcxyz
aber nicht:
xabc
zzab
xaz
Der Teil „mein Wort ist ein Präfix von“ ist einfach, ^abc
natürlich muss man einfach auf „ “ passen, aber für den Teil „Zeile ist ein Präfix meines Wortes“ habe ich noch keine Lösung gefunden. Habe etwas in awk probiert, konnte den Zeileninhalt aber nicht zu einem Teil des regulären Ausdrucks machen.
Antwort1
Sie müssen zwei Fälle behandeln: entweder die Zeile ist kürzer als Ihr Suchbegriff oder die Zeile ist länger.
Wenn es länger ist, möchten Sie testen, ob der Zeilenanfang mit der Testzeichenfolge übereinstimmt.
Wenn es kürzer ist, möchten Sie testen, ob der Anfang der Suchzeichenfolge mit der Zeile übereinstimmt.
In den Fällen, in denen die Längen gleich sind, funktioniert jede Methode.
awk -v search=abc 'length() > length(search) ? substr($0, 1, length(search)) == search : substr(search, 1, length()) == $0' inputfile