Puede especificar un rango de líneas de operar. Por ejemplo, para operar en todas las líneas, (que por supuesto es el valor predeterminado):

sed -e "1,$ s/a/b/"

Pero necesito para operar en todos, pero la última línea. Evidentemente, usted no puede usar expresiones aritméticas:

sed -e "1,$-1 s/a/b/"

(Estoy usando cygwin en este caso, si se hace una diferencia)

InformationsquelleAutor Chris Noe | 2009-06-03

5 Comentarios

  1. 47
    sed -e "$ ! s/a/b/"
    

    Esto coincidirá con cada línea, pero la última. Confirmado con una prueba rápida!

  2. 14

    Este comando funciona, también

    sed '$d'
    
    • Lo que si se quiere que la última línea impresa?
  3. 3

    Sé que no es sed, pero tengo la sensación de que head obtiene la manera más fácil y flexible:

    head -n -1 the-file
    

    Uso -2, -3,… en vez de -1, para recuperar todos pero las dos últimas líneas, etc.

  4. 1

    Bien, usted podría piratear con algo como esto:

    sed -e "1,$(($(cat the-file | wc -l) - 1))s/a/b/"
    

    O, se puede utilizar tail lugar:

    (tail +1 the-file) | sed -e s/a/b/; tail -1 the-file
    
  5. -1

    En un sentido más general, este problema requiere para la edición de una secuencia mediante la especificación de un rango con uno de los límites de los intervalos de ser un desplazamiento de la fin-de-archivo. En el ejemplo siguiente se muestra cómo hacer esto. En este ejemplo estoy de impresión de todas las líneas de un archivo, comenzando con la línea 5 de la última línea, y terminando con la última línea. En su caso, se puede establecer OFFSET = -1en lugar de OFFSET = -5.

    (( OFFSET = -5 )); (( N1 = $(cat pgen.c | wc -l) + OFFSET )); sed -n "$N1,$p" thefile
    

    Este comando se puede introducir en una línea.

    • Alejandro, esta respuesta debe ser eliminado, y el texto introductorio se trasladó a su reemplazo de la respuesta.

Dejar respuesta

Please enter your comment!
Please enter your name here