with variable special characters another bash replace sed

bash - variable - sed replace in file



Eliminando caracteres no alfanuméricos con sed (5)

Estoy intentando validar algunas entradas para eliminar un conjunto de caracteres. Solo se permiten caracteres alfanuméricos más, punto, guión bajo, guión. He probado la expresión de expresiones regulares [^/w.-] aquí http://gskinner.com/RegExr/ y coincide con lo que quiero eliminar, por lo que no estoy seguro de por qué sed devuelve lo contrario. ¿Qué me estoy perdiendo?

Mi objetivo final es ingresar "Â10.41.89.50 " y obtener "10.41.89.50 ".

He intentado:

echo "Â10.41.89.50 " | sed s/[^/w.-]//g echo "Â10.41.89.50 " | sed s/[^/w.-]//g devuelve Â...

echo "Â10.41.89.50 " | sed s/[/w.-]//g echo "Â10.41.89.50 " | sed s/[/w.-]//g y echo "Â10.41.89.50 " | sed s/[/w^.-]//g echo "Â10.41.89.50 " | sed s/[/w^.-]//g devuelve Â10418950

Intenté la respuesta que se encuentra aquí Omita / elimine el carácter no ascii con sed pero no se eliminó nada.


Basado en la respuesta de anubhava, este me funcionó:

s/^[[:alnum:]]//g

Reemplazó cualquier cosa que no sea alfanumérica con espacio simple.

Nota: "." los personajes se conservan


Es posible que desee utilizar la clase [:alpha:] lugar:

echo "Â10.41.89.50 " | sed "s/[[:alpha:].-]//g"

Deberia trabajar. De lo contrario, es posible que deba cambiar su configuración local.

Por otro lado, si solo quiere conservar los dígitos, los guiones y el punto ::

echo "Â10.41.89.50 " | sed "s/[^[:digit:].-]//g"

Si su cadena está en una variable, puede usar purga pura y expansiones de parámetros para eso:

$ dirty="Â10.41.89.50 " $ clean=${dirty//[^[:digit:].-]/} $ echo "$clean" 10.41.89.50

o

$ dirty="Â10.41.89.50 " $ clean=${dirty//[[:alpha:]]/} $ echo "$clean" 10.41.89.50

También puedes echar un vistazo a la respuesta de 1_CR .


La bandera de tr ''s -c (complemento) puede ser una opción

echo "Â10.41.89.50-._ " | tr -cd ''[[:alnum:]]._-''


Well sed no admitirá caracteres Unicode. Use perl lugar:

> s="Â10.41.89.50 " > perl -pe ''s/[^/w.-]+//g'' <<< "$s" 10.41.89.50


<`[[:alnum:]_.@]`

Esto funcionó bien para mí. Preservó todos los caracteres que especifiqué para mis propósitos.