Eliminar una línea que no contenga un valor

Resuelto
dpart -  
pitibalrog Mensajes publicados 1 Estado Miembro -
Hola,
Tengo un archivo txt con cientos de miles de líneas.
Solo quiero conservar las líneas que contienen el valor 42218
¿Tienes algún medio?
¡Sabes que no sé programar, por supuesto!
Gracias de antemano, tu ayuda sería muy valiosa.
Configuración: Windows XP Firefox 3.5.3 Word 2002

9 respuestas

  1. Zep3k!GnO Mensajes publicados 2049 Estado Miembro 200
     
    ¡Hola,
    entonces tú vas a bendecir las expresiones regulares!

    En resumen, es una forma de escritura genérica para hacer búsqueda y reemplazo.
    Necesitas un editor de texto que haga búsqueda y reemplazo con expresiones regulares, como un notepad++ => https://www.commentcamarche.net/telecharger/developpement/16295-notepad/

    Aquí está, según yo, la forma más simple de seguir:

    1] Marcamos las líneas a conservar:
    búsqueda: ^(.*)(42218)(.*)$
    reemplazar: @$1$2$3

    2] Eliminamos las líneas que no queremos
    búsqueda: ^[^@]{1}.*$
    reemplazar por nada, eliminamos:
    3] Eliminamos los saltos de línea superfluos:
    búsqueda: \r\n\r\n
    reemplazar: \r\n

    4] Eliminamos el marcado de las líneas:
    búsqueda: ^@
    reemplazar por nada, eliminamos:

    ¡Eso es, se puede hacer en menos expresiones, pero esto es lo más simple de escribir/entender!

    ¡EnJoY!

    Zep3k!GnO
    Somos rangers, amigo, rangers...
    11
    1. dpart
       
      1ª etapa: realmente reemplazo las líneas con mi valor por @$1$2$3
      ¿Cuál es el interés?

      2ª etapa: ahí no sucede nada

      ¿Estoy haciendo algo mal?
      0
      1. Zep3k!GnO Mensajes publicados 2049 Estado Miembro 200 > dpart
         
        No sé, debo escribir mal, mal expresarme porque es la + simple que mueres...

        1ª etapa: efectivamente reemplazo las líneas con mi valor por @$1$2$3
        ¿Cuál es el interés?


        --> 1] Marcamos las líneas a conservar:
        ==> Pues sirve para marcar las líneas!

        2ª etapa: aquí no pasa nada, ¿estoy haciendo algo mal?: Sí, porque esta línea suprime las que no queremos, como he INDICADO en el enunciado del 2]...

        desbordado....
        --

        Zep3k!GnO
        Somos rangers, tío, rangers...
        0
    2. pls
       
      El 1) añade un @ al principio de cada línea a conservar
      => para que funcione, es necesario marcar la casilla "expresión regular" en la parte inferior de la caja de búsqueda
      El 2) elimina todas las líneas que no comienzan con @
      0
    3. Archimed
       
      Hay algo mucho más simple con las expresiones regulares (ExpReg):

      v/42218/d

      Lo que significa: elimina todas las líneas que no contienen el valor "42218"
      0
    4. pitibalrog Mensajes publicados 1 Estado Miembro
       
      El tema es un poco antiguo, pero cuando veo que se habla de Notepad++ con expresiones regulares me parece genial, aunque cuando se propone hacer esto en 4 pasos en lugar de uno solo, entiendo que pueda resultar desconcertante.

      Para conservar solo las líneas que contienen 42218, basta con buscar las líneas que no contienen 42218 y eliminarlas (reemplazándolas por nada).

      Para ello, en Notepad++, presiona las teclas ctrl+H para abrir la ventana de búsqueda y reemplazo.

      En el campo "Buscar", escribe: ^((?!42218).)*$\n
      Deja el campo "Reemplazar por" vacío
      Marca "Expresión regular" en el modo de búsqueda

      Y finalmente haz clic en el botón reemplazar todo. Si por algún motivo esto no funciona como esperabas, presiona las teclas ctrl+z para volver al estado anterior.
      0
  2. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
    hola
    por lo tanto, solo quiero conservar la primera línea, que contiene "42218"
    en DOS
    findstr "42218" archivo.txt > archivo2.txt
    8
    1. lami20j Mensajes publicados 21506 Fecha de registro   Estado Moderador, Colaborador de seguridad Última intervención   3 571
       
      Hola,

      Gracias ;-)
      --
      106485010510997108
      0
  3. lami20j Mensajes publicados 21506 Fecha de registro   Estado Moderador, Colaborador de seguridad Última intervención   3 571
     
    Hola,
    Con sed (el archivo original se guardará con el nombre archivo.txt.txt)

    sed -i.txt '/42218/!d' archivo.txt

    --
    106485010510997108
    1
    1. dpart
       
      bueno y gracias, pero para mí "sed" es chino...
      0
  4. dpart
     

    01004;Ambérieu-en-Bugey;42218;Saint-Étienne;14,966229
    0
  5. Alain_42 Mensajes publicados 5413 Estado Miembro 904
     
    si tienes Excel puedes hacer esto con

    escribes Texto en la primera celda

    luego copias todo tu archivo con CTRL+C
    pones el cursor en la celda de abajo y pegas todo tu archivo con CTRL+V

    selecciona todo y luego ve a Datos

    Filtro...

    filtro automático, seleccionas contiene y al lado escribes 42218
    y OK, solo te quedarán las líneas que te interesan
    las copias y pegas donde quieras
    0
  6. dpart
     
    sí, gracias, pero tengo demasiadas líneas para que funcione con Excel. A menos que divida el archivo txt en varias decenas de otros...
    Es por eso que buscaba una forma automática de hacerlo directamente en el archivo txt.
    0
  7. Zep3k!GnO Mensajes publicados 2049 Estado Miembro 200
     
    ¡Wow, genial! No lo conocía, ¡está increíble! :)
    --

    Zep3k!GnO
    Somos rangers hombre, rangers...
    0