Como este comando sed funciona?

12

Encontrei esta solução para imprimir uma linha específica de um arquivo de texto:

sed '123!d;q' file

Por que o sed não sai depois da primeira linha de entrada nesse caso?

    
por Eugene Yarmash 18.11.2011 / 09:10

1 resposta

20

Em inglês, esse programa sed significa: para cada linha,

  • [ 123! ] se o número da linha atual não for 123, então [ d ] excluirá a linha atual e iniciará o próximo ciclo (ou seja, mover para a próxima linha);
  • então (mas nós só alcançamos este ponto se o comando d não foi executado), [ q ] sai sem processar mais linhas (mas imprima a linha atual em nossas agonizantes mortes).

Ou, se preferir, na sintaxe da 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
    
por 18.11.2011 / 09:35

Tags