sed + cómo eliminar la palabra si uno de los caracteres de la palabra contiene "m" o "M"

sed + cómo eliminar la palabra si uno de los caracteres de la palabra contiene "m" o "M"

¿Cómo eliminar una palabra si uno de los caracteres de la palabra contiene "m" o "M"?

Intenté esto, pero no funciona:

 echo 6.5G 66.5m | sed -e 's/[m][M]//g'

Respuesta1

Tu comando sed es

s/[m][M]//g

Esto eliminará solo la cadena mMde su entrada, porque usted solicitó que coincida

  • cualquier cosa en el conjunto m, seguido de
  • cualquier cosa en el conjunto M.

Probablemente quisiste escribir [Mm]en su lugar. Sin embargo , puedes obtener el mismo efecto agregando la /iopción al scomando:

s/m//ig

Ahora esto eliminará todas las mayúsculas o minúsculas m:

$ echo 6.5G 66.5m | sed -e s/m//ig
6.5G 66.5

Su pregunta es cómo eliminar palabras completas que contengan esta letra. Para eso, necesitamos hacer coincidir los caracteres que no sean espacios antes o después. [^ ]coincide con un carácter que no es un espacio y [^ ]*coincide con cero o más caracteres que no son un espacio, por lo que queremos

s/[^ ]*m[^ ]*//ig

Probando esto:

$ echo 6.5G 66.5m | sed -e 's/[^ ]*m[^ ]*//ig'
6.5G 

y

$ echo Five Merry Women went fishing | sed -e 's/[^ ]*m[^ ]*//ig'
Five   went fishing

Respuesta2

$ echo 6.5G 66.5m | sed -e 's/[[:space:]].*[mM]//g'
6.5G

Tenga en cuenta que la "m" y la "M" forman un patrón: su versión (que no funciona) busca una "m" seguida de una "M".

Respuesta3

Si quieres eliminarlo puedes probar esto.

[root@connect ~]# echo 6.5M 66.5m | sed -e 's/m//g' | sed -e 's/M//g'
6.5 66.5

Respuesta4

Pruebe esto, eliminará la línea que contiene 'm' o 'M'

echo 6.5G 66.5m | sed "/[mM]/d"

información relacionada