Ho trovato questa soluzione per stampare una riga specifica da un file di testo:
sed '123!d;q' file
Perché in questo caso non si chiude dopo la prima riga di input?
Ho trovato questa soluzione per stampare una riga specifica da un file di testo:
sed '123!d;q' file
Perché in questo caso non si chiude dopo la prima riga di input?
Risposte:
In inglese, questo sedprogramma significa: per ogni riga,
123!] se il numero di riga corrente non è 123, quindi [ d] elimina la riga corrente e avvia il ciclo successivo (ovvero passa alla riga successiva);dcomando non è stato eseguito), [ q] esce senza elaborare altre righe (ma stampa la riga corrente nelle nostre piaghe morenti).O se preferisci, nella sintassi della 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;}, non dovrebbe qapplicarsi a ogni riga (quindi solo la prima)?
qapplica a ogni riga in cui viene eseguita. Ma quando il numero di riga non è 123, il dcomando viene eseguito e il suo significato è quello di saltare immediatamente alla riga di input successiva.
sed -n 123p(stampa lo stesso output) tranne che si ferma dopo la riga 123 anziché elaborare potenzialmente altre migliaia di righe con le quali non farà mai nulla.
!era collegatod, non123.