Entfernen Sie zwei Punkte vom Zeilenende

Entfernen Sie zwei Punkte vom Zeilenende

Ich muss reguläre Ausdrücke verwenden, um den gesamten Text ab dem Zeilenende und zwei Punkte zurück zu entfernen.

gtk2-2.24.22-2.fc20.x86_64

wird

gtk2-2.24.22-2

Dies ist die Ausgabe rpm -qaeiner Textdatei und ich muss das Ende abschneiden.

Antwort1

Tust dubrauchenein regulärer Ausdruck? Ich weiß, das ist eine etwas billige Lösung, aber reguläre Ausdrücke sind nicht für alles eine Lösung.

Beispielsweise mit der Bash-String-Manipulation:

foo="gtk2-2.24.22-2.fc20.x86_64"
echo ${foo%.*.*} # strip the longest match from the last dot

Kehrt zurück gtk2-2.24.22-2.

Sie können dies für eine Datei wie folgt aufrufen:

foo=$(head -1 file.txt)
echo ${foo%.*.*} > new-file.txt

Reguläre Ausdrücke sind gut geeignet, um etwas von Anfang an zu analysieren, nicht von hinten, da sie „gierig“ von links nach rechts konsumieren. Das ist machbar, aber Sie müssen etwas ausführlicher sein, als Sie es in einfachem Bash tun könnten.

Beachten Sie, dass das, was in Bash wie ein regulärer Ausdruck aussieht ( .*), kein „echter“ regulärer Ausdruck ist. In einem echten regulären Ausdruck .steht der Punkt für alle Zeichen und *bedeutet, dass das vorherige Zeichen (die Gruppe) 0–n-mal wiederholt wird. In Bash hingegen .steht der Punkt für einen echten Punkt und *ist ein Platzhalter für alle Zeichen.

verwandte Informationen