Expresiones regulares para quitar el texto no deseado
Pregunta
Todavía estoy especie de nuevo a expresiones regulares en general. Estoy tratando de recuperar los nombres de un campo para que pueda dividir para su uso posterior (utilizando Pentaho Data Integration / Caldera para la extracción de datos). He aquí un ejemplo de la cadena que me dan:
CN=Name One/OU=Site/O=Domain;CN=Name Two/OU=Site/O=Domain;CN=Name Three/OU=Site/O=Domain
Me gustaría tener el siguiente formato devuelto:
Name One;Name Two;Name Three
Caldera utiliza Java expresiones regulares.
Solución
Eso suena como que quieren sustituir y reemplazar basa en una expresión regular. Cómo hacer correctamente, eso depende de su idioma. Pero con sed lo haría así:
echo "CN=Name One/OU=Site/O=Domain;CN=Name Two/OU=Site/O=Domain;CN=Name Three/OU=Site/O=Domain" |\
sed 's/CN=\([^\/]*\)[^;]*/\1/g'
Si usted tiene la intención de dividir más tarde de todos modos, es probable que desee simplemente coincidir con los nombres y devolverlos im un bucle. Ejemplo de código en Perl:
#!/usr/bin/perl
$line="CN=Name One/OU=Site/O=Domain;CN=Name Two/OU=Site/O=Domain;CN=Name Three/OU=Site/O=Domain";
for $match ($line =~ /CN=([^\/]*)/g ){
print "Name: $match\n";
}
Otros consejos
suponiendo que tiene en archivo.txt:
sed -e 's/\/OU=Site\/O=Domain//g' -e 's/CN=//g' file.txt