Comando ed: eliminar desde la línea 1 hasta la primera línea en blanco

Comando ed: eliminar desde la línea 1 hasta la primera línea en blanco

Encontré este código en un libro de texto; el libro solo dice que eso 1,/^[ ]*$/d significa "Eliminar desde la línea 1 hasta la primera línea en blanco". ¿Qué significa cada personaje específicamente?

ed $1 << EOF
    1,/^[ ]*$/d
    w
    q
EOF

Respuesta1

1,/.../significa el rango desde la primera línea hasta una línea que coincide con el patrón entre /.

/^[ ]*$/coincide con una línea que contiene 0 o cualquier número de espacios [ ]*desde el principio ^hasta el final $de la línea.
No está claro si el código de la pregunta es intencional y si es una copia exacta del libro. No son necesarios corchetes alrededor de un solo espacio. Quizás el autor original quería tener un espacio y un carácter de tabulación entre corchetes, que podrían reemplazarse con la clase de carácter [[:blank:]].

des el comando para eliminar la línea

wescribe el archivo

qsalir del editor

Esos comandos se envían a edtravés de unaquí documento, indicado por el << EOF. La EOFcadena es un nombre semiarbitrario que está emparejado con las otras EOFcuatro líneas hacia abajo. Dejar lo EOFsin comillas significa que se expandirá cualquier variable en las líneas intermedias.

La otra cosa a tener en cuenta aquí es el archivo sin comillas del ejemplo $1. El edcomando/script se ejecutará contra el primer parámetro posicional (argumento del script o función)sujeto a una mayor división de espacios en blanco y generación de nombres de archivos. Realmente debería citarse el argumento. Para más lecturas, consulte¿Por qué mi script de shell se atasca con espacios en blanco u otros caracteres especiales?yImplicaciones de seguridad de olvidarse de citar una variable en shells bash/POSIX.

Respuesta2

Comando y entrada

Es $1el nombre del archivo que se va a editar y todo lo que hay entre los EOF son comandos para ed.

Descripción paso a paso de1,/^[ ]*$/d

  • 1,empezar desde la línea1 y en este caso continuar hasta la primera aparición de la cadena de búsqueda
  • /indica que estamos a punto de buscar una cadena
  • ^indica que queremos hacer coincidir el inicio de la línea en el archivo
  • [indica que estamos a punto de especificar muchos caracteres
  • ' ' queremos hacer coincidir un espacio; normalmente habría más caracteres aquí
  • ]terminado de especificar caracteres
  • *queremos hacer coincidir 0 o más espacios (o cualquier carácter entre ellos [])
  • $hasta el final de la línea en el archivo
  • /cerrando la búsqueda
  • dborrar la linea

Luego, la siguiente línea wescribe los cambios y qsale ed.

Efecto

Si la línea uno del archivo ( $1) está vacía o solo tiene espacios (sin pestañas), se eliminará.

información relacionada