In OSX, sed verhält sich wie folgt:Sed überschreibt Match Gruppen von Linie in OSX beginnend
echo -en 'xxx abc\r\nxxx aa bb cc\r\n' | sed -E 's/xxx (.*)/\1->/g'
->c
-> bb cc
Während ich die erwartete folgende:
echo -en 'xxx abc\r\nxxx aa bb cc\r\n' | sed -E 's/xxx (.*)/\1->/g'
abc->
aa bb cc->
Ich bin einfach passend eine Linie mit xxx
dann Alles andere irgendwo in eine von mir konstruierte Saite legen. Es scheint, dass es mit \r
verwandt ist, aber bin nicht ganz sicher, wie man es repariert, ohne zuerst \r
von der Textdatei zuerst zu beschneiden. (Das obige Beispiel erwähnt keine Textdatei, aber Sie können sich vorstellen, dass die Ausgabe von echo
in einer Textdatei war).
Gibt es eine Erklärung warum ->
die Gruppenübereinstimmung überschreibt?
Möchten Sie unbedingt '\ r' beibehalten? probiere 'sed -E 's/\ r //; s/xxx (. *)/\ 1 ->/g; s/$/\/r \ '' – Sundeep
Dateien in OSX haben diese, aber natürlich brauche ich' \ r' nicht, obwohl das Dumping sie dazu bringt, dass diese Dateien in OSX schlecht aussehen. Auch in deiner Lösung "->" frißt man Charaktere weg. – hyiltiz
Ich überprüfte es auf 'sed (GNU sed) 4.2.2' und es gibt Ihre erwartete Ausgabe ... – Sundeep