sed entfernt Sonderzeichen und Leerzeichen in der Zeile

sed entfernt Sonderzeichen und Leerzeichen in der Zeile

Eingang

[*] 111, 22, 33, 44

Ausgabe

111,22,33,44

Mithilfe seddes Befehls sed 's/^\[\*\][[:space:]]*//' filekonnten wir die Ausgabe anzeigen, 111, 22, 33, 44was bedeutet, dass noch Platz vorhanden ist.

Was ist also der richtige sedBefehl?

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 gBefehlum 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 sedBefehl weiterleiten können, zum Beispiel:

echo '[*] 111, 22, 33, 44' \
| sed 's/^\[\*\]//' \
| sed 's/[[:space:]]//g'

verwandte Informationen