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 sedprograma 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);dcomando 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 qaplicarse a todas las líneas (así que solo a la primera)?
qaplica a cada línea donde se ejecuta. Pero cuando el número de línea no es 123, el dcomando 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.