sed + wie entferne ich das Wort, wenn eines der Zeichen im Wort „m“ oder „M“ enthält?

sed + wie entferne ich das Wort, wenn eines der Zeichen im Wort „m“ oder „M“ enthält?

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 /idem sBefehl 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"

verwandte Informationen