Comment cela fonctionne-t-il?

J'ai rencontré cette solution pour l'printing d'une ligne spécifique à partir d'un file text:

sed '123!d;q' file 

Pourquoi ne pas abandonner après la première ligne d'input dans ce cas?

En anglais, ce programme sed signifie: pour chaque ligne,

  • [ 123! ] si le numéro de ligne actuel n'est pas 123, alors [ d ] effacera la ligne actuelle et commencera le cycle suivant (c.-à-d. passer à la ligne suivante);
  • (mais nous n'atteignons ce point que si la command d n'a pas été exécutée), [ q ] quitte sans traiter plus de lignes (mais imprimons la ligne courante dans nos agonisants).

Ou si vous préférez, en syntaxe 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