He encontrado este pregunta y respuesta sobre cómo eliminar la triple líneas vacías. Sin embargo, necesito la misma, sólo por el doble de líneas vacías. Es decir. todas las dobles líneas en blanco debe ser eliminado por completo, pero solo las líneas en blanco debe ser guardado.

Yo sé un poco de sed, pero la propuesta de comando para quitar el triple de líneas en blanco que está por encima de mi cabeza:

sed '1N;N;/^\n\n$/d;P;D'

  • ¿qué acerca de la triple y más líneas en blanco?
  • sí sería aceptar el triple o más líneas en blanco.
InformationsquelleAutor marlar | 2012-09-26

7 Comentarios

  1. 11

    He comentado el sed comando que no entiendo:

    sed '
        ## In first line: append second line with a newline character between them.
        1N;
        ## Do the same with third line.
        N;
        ## When found three consecutive blank lines, delete them. 
        ## Here there are two newlines but you have to count one more deleted with last "D" command.
        /^\n\n$/d;
        ## The combo "P+D+N" simulates a FIFO, "P+D" prints and deletes from one side while "N" appends
        ## a line from the other side.
        P;
        D
    '

    Quitar 1N porque sólo necesitamos dos líneas en la ‘pila’, y es suficiente con la segunda N, y cambiar /^\n\n$/d; a /^\n$/d; para eliminar todos los dos días consecutivos de líneas en blanco.

    Una prueba:

    Contenido de infile:

    1
    
    
    2
    3
    
    4
    
    
    
    5
    
    6
    
    
    7

    Ejecutar el sed comando:

    sed '
        N;
        /^\n$/d;
        P;
        D
    ' infile

    Que los rendimientos:

    1
    
    
    2
    3
    
    4
    
    
    
    5
    
    6
    
    
    7
    • Muchas gracias, este comando es: sed ‘N;/^\$n/d;P;D’
    • Para todos los que quieren usar esto, no olvides el sed -i opción para cambiar inmediatamente en el archivo en lugar de enviar el resultado a la salida de corriente.
    • en macOS, de esta forma se elimina la última línea del archivo (incluso cuando esa línea es que no esté en blanco)
  2. 50

    Esto sería más fácil con cat:

    cat -s
    • Bueno, pero no es exactamente el mismo. Sin embargo, yo no sabía que esta opción y es muy útil, así que gracias de todos modos.
    • Nunca se sabía acerca de esto, pero era exactamente lo que necesitaba. Buen hallazgo.
    • Para los curiosos: explainshell.com/explain?cmd=cat+-s
  3. 5
    sed '/^$/{N;/^\n$/d;}'

    Se elimina sólo dos días consecutivos de líneas en blanco en un archivo. Usted puede usar esta expresión sólo en el archivo, a continuación, sólo se puede comprender plenamente. Cuando una línea en blanco va a venir de que va a entrar en los apoyos.

    Normalmente sed va a leer una línea. N se anexará a la segunda línea de patrón del espacio. Si la línea es una línea vacía. ambas líneas están separadas por un salto de línea.

    /^\n$/ este patrón coincide que el tiempo sólo la d de trabajo. Otra cosa d no trabajo. d se utiliza para eliminar el espacio en el patrón todo el contenido, a continuación, iniciar el siguiente ciclo.

    • He probado este comando y se retira el exceso de saltos de línea (algunos de los múltiples saltos de línea se eliminan por completo en lugar de reemplazarse por una sola línea). No estoy realmente seguro de por qué sucede esto, así que ten cuidado.
    • sed ‘N;/^\$n/D;P;D;’ parece funcionar mejor y elimina sólo consecutivos saltos de línea
  4. 1

    PERO la solución anterior sólo se eliminará primera búsqueda de 3 consecutivos línea en blanco.
    Para eliminar todos los, 3 en blanco consecutivos líneas de utilizar a continuación el comando

    sed '1N;N;/^\n\n$/{ N;s/^\n\n//;N;D; };P;D' filename
  5. -1

    PERO la solución anterior sólo se eliminará primera búsqueda de 3 consecutivos línea en blanco. Para eliminar todos los, 3 en blanco consecutivos líneas de utilizar a continuación el comando

    sed ‘1N;N;/^\n\n$/{ N, s/^\n\n//N;D; };P;D’ nombre de archivo

    • Entiendo que has creado 2 cuentas. Ahora le sugiero que continúe el otro y tiene que eliminarse. sugerencia: puede cambiar el nombre de la cuenta después de la creación
  6. -2

    Solo tubo que «uniq» orden y todas las líneas vacías sin importar el número de ellos se redujo a uno solo. Sencillo es mejor.

    Aclaración: Como Marlar declarado que esto no es una solución si usted tiene «otro que no esté en blanco consecutivos duplicado líneas» que no desea deshacerse de. Este es una solución en otros casos, como cuando tratando de limpieza de archivos de configuración que fue la solución que se me fue después cuando vi esta pregunta. He resuelto mi problema, de hecho, sólo el uso de ‘uniq’.

    • A veces puede ser demasiado simple, aunque! Si la fuente contiene entradas duplicadas que sería eliminado también. Que no es una solución aceptable.

Dejar respuesta

Please enter your comment!
Please enter your name here