
Eingang
[*] 111, 22, 33, 44
Ausgabe
111,22,33,44
Mithilfe sed
des Befehls sed 's/^\[\*\][[:space:]]*//' file
konnten wir die Ausgabe anzeigen, 111, 22, 33, 44
was bedeutet, dass noch Platz vorhanden ist.
Was ist also der richtige sed
Befehl?
Antwort1
Die kurze Antwort lautet: Das Folgende sollte das gewünschte Ergebnis liefern:
sed 's/[][*]\|[[:space:]]//g'
Testen Sie es wie folgt:
echo '[*] 111, 22, 33, 44' | sed 's/[][*]\|[[:space:]]//g'
Ausgabe:
111,22,33,44
Es folgt eine längere Erklärung.
Die Schlüsselzutat, die Ihrem Ausdruck fehlte, war die Verwendung vonder g
Befehlum eine globale Ersetzung durchzuführen. Ohne diesen Befehl wird nur die erste Übereinstimmung in jeder Zeile ersetzt.
Der (meiner Meinung nach) kontraintuitivste Teil meiner Lösung ist, wie man die eckigen Klammern in eine Zeichenklasse einbindet. Dazu verweisen wir auf diesed-Handbuch:
‘]’ ends the bracket expression if it’s not the first list item. So, if you want to make the ‘]’ character a list item, you must put it first.
Weitere Informationen zu diesem Thema finden Sie im folgenden Beitrag auf SeverFault:
Alternativ hätten Sie Ihren Ausdruck nehmen und ihn in einen anderen sed
Befehl weiterleiten können, zum Beispiel:
echo '[*] 111, 22, 33, 44' \
| sed 's/^\[\*\]//' \
| sed 's/[[:space:]]//g'