Tengo un archivo en linux con entradas similares como por debajo de

dn: CN=HP_NetworkSupport,OU=groups,DC=HDFCSLDM,DC=COM
dn: CN=Review users,OU=groups,DC=HDFCSLDM,DC=COM

Me gustaría extraer sólo el CN de la información, hasta que la primera ,
por ejemplo:

> HP_NetworkSupport
> Review users

en el caso anterior, a otro archivo.

¿Cuál sería el comando para hacer el mismo.

InformationsquelleAutor bukubapi | 2013-10-08

5 Comentarios

  1. 4

    Utilizando awk

    awk -F"=|," '{print $2}' file
    HP_NetworkSupport
    Review users

    o

    awk -F[=,] '{print $2}' file
    HP_NetworkSupport
    Review users

    Establecer el delimitador para , o =, a continuación, imprimir el segundo campo.


    De haendel campo con coma dentro, usted debe utilizar un analizador de LDAP, pero esto debería funcionar.

    echo file
    dn: CN=HP_NetworkSupport,OU=groups,DC=HDFCSLDM,DC=COM
    dn: CN="Review, users",OU=groups,DC=HDFCSLDM,DC=COM
    
    awk -F"CN=|,OU" '{print $2}' file
    HP_NetworkSupport
    Review, users
  2. 15

    Esta es una manera con oteo:

    grep -Po '(?<=CN=)[^,]*' file > new_file

    Se pone todo el texto de la CN= (no incluido) hasta que se encuentra una coma ,. La idea de [^,]* es recuperar cualquier carácter que no sea una coma.

    De prueba

    $ grep -Po '(?<=CN=)[^,]*' file
    HP_NetworkSupport
    Review users
    • Por desgracia, se producirá un error para casos como CN="Smith, John",OU="My Organization"
    • Sí, pero la entrada no está entre comillas dobles rodeado.
    • Bueno, esto es parte de la ingeniería de software de trabajo – predecir qué clientes se utilice. Y lo más probable es que se
    • Lo sé, pero la entrada y la explicación no lo muestran. ¿Qué pasa si los parámetros no están en el CN, OU, DC orden? Fracasaría en su respuesta.
    • Concedido, para muchos regex preguntas con respuesta correcta es NO regex, pero buen analizador
    • ¿A qué te refieres? Yo no lo entiendo.
    • Me refiero a que este es un buen ejemplo de que para responder a esta pregunta el 100% correctamente uno debe utilizar LDAP analizador. Técnicamente, LDAP CN o OU puede incluir texto CN=blah (probablemente citado) en el interior de la misma. ¿Cómo es eso? Esto es similar a la premisa que no se puede utilizar expresiones regulares para analizar XML.
    • Sí, estoy de acuerdo 🙂 De hecho yo no era consciente de que esto era un pedazo de LDAP archivo de configuración. Vamos a ver si nuestros intentos son suficientes para los requerimientos, saludos!
    • Una buena solución es GNU Grep está disponible +1. Fijo que @mvp de las críticas que se podrían hacer son positivos lookbehind grep -Po '(?<=CN=).*(?=,OU=)' file
    • Gracias @sudo_O! No voy a actualizar mi respuesta, como la aceptación de uno no se usa, de modo que la cooperativa puede tener suficiente con la simple coma de cheques. De todos modos, gracias por enseñar de nuevo! 🙂
    • Gracias por siempre regular-expressions.info/lookaround.html link.
    • Tengo curiosidad, si usted está buscando para HTML o XML etiquetas, usted necesita para escapar de los personajes como este? grep -Po '(?<=\<string name\=")[^"]*'
    • darle una oportunidad 😉 he intentado y mi GNU grep dice que no es necesario: grep -Po '(?<=<hola>).*(?=</hola>)' <<< "<hola>adeu</hola>" devuelve «adeu» sin un problema. Por supuesto, usted puede escapar de cada carácter individual, pero este no es necesario.

  3. 2
    perl -lne 'print $1 if(/CN=([^\,]*),/)' your_file

    Probado A Continuación:

    > cat temp
    dn: CN=HP_NetworkSupport,OU=groups,DC=HDFCSLDM,DC=COM
    dn: CN=Review users,OU=groups,DC=HDFCSLDM,DC=COM
    > perl -lne 'print $1 if(/CN=([^\,]*),/)' temp
    HP_NetworkSupport
    Review users
    >
  4. -1

    De la tubería a través de este comando:

    sed -E "s/.*CN=(.+?),OU=.*/\1/g"
    • Hace este trabajo para usted? Creo que sed no se puede usar no codicioso de cuantificadores y los paréntesis deben ser escapado de hacer agrupación.
    • lo siento, fija este uno trabaja

Dejar respuesta

Please enter your comment!
Please enter your name here