
Wie entferne ich das Wort, wenn eines der Zeichen im Wort „m“ oder „M“ enthält?
Ich habe dies versucht, aber es funktioniert nicht:
echo 6.5G 66.5m | sed -e 's/[m][M]//g'
Antwort1
Ihr sed-Befehl ist
s/[m][M]//g
Dadurch wird nur die Zeichenfolge aus der Eingabe entfernt mM
, da Sie eine Übereinstimmung angefordert haben
- irgendetwas im Set
m
, gefolgt von - alles im Set
M
.
Wahrscheinlich wollten Sie stattdessen schreiben [Mm]
. Sie können jedoch denselben Effekt erzielen, indem Sie /i
dem s
Befehl die Option hinzufügen:
s/m//ig
Dies entfernt nun alle Groß- und Kleinbuchstaben m
:
$ echo 6.5G 66.5m | sed -e s/m//ig
6.5G 66.5
Ihre Frage lautet, wie ganze Wörter entfernt werden können, die diesen Buchstaben enthalten. Dazu müssen wir alle Nicht-Leerzeichen davor oder danach abgleichen. [^ ]
stimmt mit einem Nicht-Leerzeichen überein und [^ ]*
stimmt mit null oder mehr Nicht-Leerzeichen überein, also wollen wir
s/[^ ]*m[^ ]*//ig
Testen Sie Folgendes:
$ echo 6.5G 66.5m | sed -e 's/[^ ]*m[^ ]*//ig'
6.5G
Und
$ echo Five Merry Women went fishing | sed -e 's/[^ ]*m[^ ]*//ig'
Five went fishing
Antwort2
$ echo 6.5G 66.5m | sed -e 's/[[:space:]].*[mM]//g'
6.5G
Beachten Sie, dass „m“ und „M“ ein Muster bilden – Ihre (nicht funktionierende) Version sucht nach einem „m“, gefolgt von einem „M“.
Antwort3
Wenn Sie entfernen möchten, können Sie dies versuchen
[root@connect ~]# echo 6.5M 66.5m | sed -e 's/m//g' | sed -e 's/M//g'
6.5 66.5
Antwort4
Versuchen Sie Folgendes. Dadurch wird die Zeile gelöscht, die „m“ oder „M“ enthält.
echo 6.5G 66.5m | sed "/[mM]/d"