Isso funciona para mim, mas talvez você esteja usando uma versão do vim que grava informações de versão em stderr. Testevim --version 2>&1 | sed 1q
William Pursell,
Funciona para mim também - então sim, sua abordagem está correta :)Verifique se o seu pacote gera essa informação, stderrpois @WilliamPursell fornece uma verificação para
Sim, essa é uma maneira de obter a primeira linha de saída de um comando.
Se o comando resultar em qualquer erro padrão que você gostaria de capturar da mesma maneira, você precisará redirecionar o erro padrão do comando para o fluxo de saída padrão:
utility 2>&1 | head -n 1
Existem muitas outras maneiras de capturar a primeira linha também, incluindo sed 1q(sair após a primeira linha), sed -n 1p(imprimir apenas a primeira linha, mas ler tudo), awk 'FNR == 1'(imprimir apenas a primeira linha, mas, novamente, ler tudo) etc.
Como @Kusalananda aponta, há muitas maneiras de capturar a primeira linha na linha de comando, mas usar o head -n 1pode não ser a melhor opção ao usar curingas, já que imprimirá informações adicionais. Mudar 'FNR == i'para 'FNR <= i'permite obter as primeiras i linhas.
Por exemplo, se você tiver n arquivos chamados file_1.txt, ... file_n.txt:
vim --version 2>&1 | sed 1q
:)
Verifique se o seu pacote gera essa informação,stderr
pois @WilliamPursell fornece uma verificação paraRespostas:
Sim, essa é uma maneira de obter a primeira linha de saída de um comando.
Se o comando resultar em qualquer erro padrão que você gostaria de capturar da mesma maneira, você precisará redirecionar o erro padrão do comando para o fluxo de saída padrão:
Existem muitas outras maneiras de capturar a primeira linha também, incluindo
sed 1q
(sair após a primeira linha),sed -n 1p
(imprimir apenas a primeira linha, mas ler tudo),awk 'FNR == 1'
(imprimir apenas a primeira linha, mas, novamente, ler tudo) etc.fonte
Eu usaria:
awk 'FNR <= 1' file_*.txt
Como @Kusalananda aponta, há muitas maneiras de capturar a primeira linha na linha de comando, mas usar o
head -n 1
pode não ser a melhor opção ao usar curingas, já que imprimirá informações adicionais. Mudar'FNR == i'
para'FNR <= i'
permite obter as primeiras i linhas.Por exemplo, se você tiver n arquivos chamados file_1.txt, ... file_n.txt:
awk 'FNR <= 1' file_*.txt hello ... bye
Mas com
head
curingas imprima o nome do arquivo:head -1 file_*.txt ==> file_1.csv <== hello ... ==> file_n.csv <== bye
fonte
head -qn1 file_*.txt