Wie kann ich diesen SED-Befehl portabler machen?

455
WilliamKF

Ich verwende den folgenden sedBefehl:

cat version | sed -e 's/[0-9][0-9][0-9][0-9][0-9:M]*-[abp]/Ver\n/' 

Was normalisiert sich so:

4330M-p -> Ver<newline> 

Das funktioniert gut mit GNU SED, aber mit BSD SED unter Mac OS X wird das \ n zu einem nähnlichen Beispiel:

4330M-p -> Vern 

So normalisieren Sie eine Ausgabe, die eine Versionsnummer enthält, die sich im Laufe der Zeit in eine statische Zeichenfolge ändert, gefolgt von einem Zeilenvorschub. Dies wird im Rahmen von Tests verwendet, bei denen die Ausgabe nach der sedVerarbeitung diffmit einer bekannten Golden-Datei verglichen wird und wir keine Fehler aufgrund von Versionsnummernänderungen wünschen und für unsere Zwecke eine neue Zeile hinzufügen müssen.

Wie kann ich durch eine Zeichenfolge ersetzt werden, die einen Zeilenumbruch in einer Weise hinzufügt, die sowohl auf der GNU- als auch der BSD-Version von funktioniert sed, oder sollte ich GNU einfach sedunter Mac OS X installieren, da dies nicht möglich ist?

0
Ich habe BSD sed noch nicht ausprobiert, aber vielleicht etwas wie `\ d13` oder etwas wie` \ x0a`? funktioniert das in GNU funktioniert es in BSD? barlop vor 8 Jahren 0
@barlop, Nein, der Backslash wird von BSD `sed` gegessen und du bekommst` Verd13` und `Verx0a`. WilliamKF vor 8 Jahren 0
Dies kann von Interesse sein http://stackoverflow.com/questions/1421478/how-do-i-use-a-new-line-replacement-in-a-bsd-sed und http://unix.stackexchange.com / fragen / 42321 / how-can-i-instrukt-bsd-sed-interpret-escape-escape-sequenzen-like-n-and-t und http://superuser.com/questions/307165/newlines-in-sed -on-mac-os-x barlop vor 8 Jahren 0

1 Antwort auf die Frage

0
tekknolagi

Sie können in Ihrem Skript einen wörtlichen Zeilenumbruch wie folgt erstellen:

cat version | sed -e 's/[0-9][0-9][0-9][0-9][0-9:M]*-[abp]/Ver\ /' 
Das funktioniert, ist aber hässlich. WilliamKF vor 8 Jahren 0
@WilliamKF Sie könnten auch GNU sed installieren, aber das ist auch keine gute Lösung. Wenn Sie eine schönere Lösung haben, verwenden Sie sie auf jeden Fall. tekknolagi vor 8 Jahren 0