2017-08-21 3 views
0

auf MKS für Windows SED, dieseSED {Befehl fehl

TYPE Q:\temp\curtainssetspread.M3U | SED -E "/z/{s_a_b_}" 

nicht mit

sed: garbage after command 

Warum?

Diese Verwendung Akkorde korrekt mit docs:

a,b{ groups all commands until the next matching }, so that sed executes the entire group only if the { command is selected by its address(es). 
+1

Ich bin nicht sicher über Besonderheiten von MKS sed, aber 's_a_b' ist nur ein einziger Befehl und POSIX sed würde'/z/s_a_b_' ohne geschweifte Klammern akzeptieren. Versuchen Sie, '' 'vor der schließenden Klammer einzufügen, die einige Probleme in BSD sed behebt. –

+0

Gibt es auch einen Grund, warum Sie Unterstriche anstelle von Schrägstrichen verwenden? –

+0

@Benjamin Um die Flucht zu reduzieren. Underscore wird weniger häufig innerhalb der Trennzeichenfolge als Schrägstrich angezeigt. Und ich finde Unterstrich lässt die Abgrenzung sichtbarer. – ChrisJJ

Antwort

1

Nach POSIX, die } muss durch eine neue Zeile vorangestellt werden. Ich bin mir nicht sicher, was MKS tut, aber die Schönheit einen Standard zu haben, ist, dass die folgende auf alle Systeme (unter Verwendung mehrerer -e s jede Saite verbindet sich mit Zeilenumbrüchen zwischen zusammen) arbeiten sollte:

sed -e "/z/{s_a_b_" -e "}" 

Wenn es funktioniert nicht, es ist ein Fehler in MKS und sollte gemeldet werden, wie sie sagen, ihre sed ist POSIX-konform.

Ich schlage vor, Sie Benjamin Rat folgen und nur tun,

sed -e '/z/s_a_b_' 

wenn möglich, wenn.

+0

Niemand sah das> _ < – HTNW

+0

Es funktioniert auf MKS SED, obwohl '(mit mehreren -es verbindet jede Zeichenfolge zusammen mit Zeilenumbrüche dazwischen)' ist undokumentiertes Verhalten https://www.mkssoftware.com/docs/man1 /ged.1.asp. Vielen Dank. – ChrisJJ

+0

"sie sagen, ihre sed ist POSIX-konform". Sie implizieren es, aber ich würde gerne sehen, wo sie es tatsächlich angeben. – ChrisJJ