
¿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 mM
de 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 /i
opción al s
comando:
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"