Sed/awk/perl stimmen mit allen Präfixen einer gegebenen Zeichenfolge überein

Sed/awk/perl stimmen mit allen Präfixen einer gegebenen Zeichenfolge überein

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, ^abcnatü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

verwandte Informationen