Obtener la primera línea de la salida de un comando de shell
96
Al intentar leer el número de versión de vim, obtengo muchas líneas adicionales que necesito ignorar. Intenté leer el manual de heade intenté el siguiente comando:
Eso funciona para mí, pero quizás esté usando una versión de vim que escribe información de versión en stderr. Pruebavim --version 2>&1 | sed 1q
William Pursell
También funciona para mí, así que sí, su enfoque es correcto :)Compruebe si su paquete genera esa información stderrcomo @WilliamPursell proporciona una verificación.
Sí, esa es una forma de obtener la primera línea de salida de un comando.
Si el comando genera un error estándar que le gustaría capturar de la misma manera, debe redirigir el error estándar del comando al flujo de salida estándar:
utility 2>&1 | head -n 1
También hay muchas otras formas de capturar la primera línea, incluidas sed 1q(salir después de la primera línea), sed -n 1p(solo imprimir la primera línea, pero leer todo), awk 'FNR == 1'(solo imprimir la primera línea, pero nuevamente, leer todo), etc.
Como señala @Kusalananda, hay muchas formas de capturar la primera línea en la línea de comando, pero usar el head -n 1puede no ser la mejor opción cuando se usan comodines, ya que imprimirá información adicional. Cambiar 'FNR == i'a 'FNR <= i'permite obtener las primeras i líneas.
Por ejemplo, si tiene n archivos llamados file_1.txt, ... file_n.txt:
awk 'FNR <= 1' file_*.txt
hello
...
bye
Pero con headcomodines imprima el nombre del archivo:
vim --version 2>&1 | sed 1q
:)
Compruebe si su paquete genera esa informaciónstderr
como @WilliamPursell proporciona una verificación.Respuestas:
Sí, esa es una forma de obtener la primera línea de salida de un comando.
Si el comando genera un error estándar que le gustaría capturar de la misma manera, debe redirigir el error estándar del comando al flujo de salida estándar:
También hay muchas otras formas de capturar la primera línea, incluidas
sed 1q
(salir después de la primera línea),sed -n 1p
(solo imprimir la primera línea, pero leer todo),awk 'FNR == 1'
(solo imprimir la primera línea, pero nuevamente, leer todo), etc.fuente
Yo usaría:
awk 'FNR <= 1' file_*.txt
Como señala @Kusalananda, hay muchas formas de capturar la primera línea en la línea de comando, pero usar el
head -n 1
puede no ser la mejor opción cuando se usan comodines, ya que imprimirá información adicional. Cambiar'FNR == i'
a'FNR <= i'
permite obtener las primeras i líneas.Por ejemplo, si tiene n archivos llamados file_1.txt, ... file_n.txt:
awk 'FNR <= 1' file_*.txt hello ... bye
Pero con
head
comodines imprima el nombre del archivo:head -1 file_*.txt ==> file_1.csv <== hello ... ==> file_n.csv <== bye
fuente
head -qn1 file_*.txt