He encontrado esta solución para imprimir una línea específica desde un archivo de texto:
sed '123!d;q' file
¿Por qué no se cierra después de la primera línea de entrada en este caso?
He encontrado esta solución para imprimir una línea específica desde un archivo de texto:
sed '123!d;q' file
¿Por qué no se cierra después de la primera línea de entrada en este caso?
Respuestas:
En inglés, este sed
programa significa: para cada línea,
123!
] si el número de línea actual no es 123, entonces [ d
] borra la línea actual y comienza el siguiente ciclo (es decir, pasa a la siguiente línea);d
comando no se ejecutó), [ q
] salga sin procesar más líneas (pero imprima la línea actual en nuestra agonía).O si lo prefiere, en sintaxis de shell:
line_number=0
while IFS= read -r pattern_space; do
line_number=$(($line_number+1))
if [ $line_number -ne 123 ]; then # 123!
continue # d
fi
echo "$pattern_space"; break # q
echo "$pattern_space" # implicit final print (never reached)
done
{d;q;}
, ¿no debería q
aplicarse a todas las líneas (así que solo a la primera)?
q
aplica a cada línea donde se ejecuta. Pero cuando el número de línea no es 123, el d
comando se ejecuta y su significado es saltar inmediatamente a la siguiente línea de entrada.
sed -n 123p
(imprime la misma salida), excepto que se detiene después de la línea 123 en lugar de procesar potencialmente miles de líneas más con las que nunca hará nada.
!
estaba conectadod
, no123
.