Encontrei esta solução para imprimir uma linha específica a partir de um arquivo de texto:
sed '123!d;q' file
Por que o sed não sai após a primeira linha de entrada nesse caso?
Encontrei esta solução para imprimir uma linha específica a partir de um arquivo de texto:
sed '123!d;q' file
Por que o sed não sai após a primeira linha de entrada nesse caso?
Respostas:
Em inglês, este sed
programa significa: para cada linha,
123!
] se o número da linha atual não for 123, [ d
] exclua a linha atual e inicie o próximo ciclo (ou seja, vá para a próxima linha);d
comando não foi executado), [ q
] sai sem processar mais linhas (mas imprima a linha atual em nossas agonias).Ou, se preferir, na sintaxe do 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;}
, não deve q
aplicar a todas as linhas (tão somente a primeira)?
q
se aplica a todas as linhas em que é executado. Mas quando o número da linha não é 123, o d
comando é executado e seu significado é pular imediatamente para a próxima linha de entrada.
sed -n 123p
(imprime a mesma saída), exceto que para após a linha 123, em vez de processar potencialmente milhares de linhas a mais que nunca fará nada.
!
estava conectadod
, não123
.