Você está confundindo sed e grep.
Para o comando sed, -2q
está dizendo para sair da iteração atual se na segunda linha, a opção -n
estiver dizendo para funcionar silenciosamente, então você obterá todas as linhas após a segunda.
O comando grep é executado por padrão para gerar todas as linhas correspondentes - mas a opção -q
diz para não produzir nada para o stdout. então, se a entrada contiver um "2", terá um valor de saída de SUCESSO, caso contrário, FALHA. O que eles são depende do seu sistema operacional e shell. Então, normalmente você diria se uma linha corresponde examinando o valor de saída do processo do grep. Isso é útil em um pipeline no qual você deseja saber se sua entrada contém algum valor como teste. Por exemplo,
if grep -q 'crash' <somelog.log ; then report_crash_via_email ; fi
Neste caso, não nos importamos em ver todas as linhas correspondentes, apenas nos preocupamos se pelo menos uma existe. O report_crash_via_email
process / function pode então sair e reabrir o arquivo, ou não.
Se você quiser que o seu processo do grep pare depois que ele encontrar o caractere "2" - ele não irá, por padrão, inspecionar cada linha procurando ver se combina - você precisa dizer para fazer isso. O comutador de linha de comando para isso é -m <value>
. Então, para o seu caso, grep -q -m1 2
.