@steeldriver necesita que sea una respuesta, ya que es la forma de hacerlo con grep, herramienta extrañamente seleccionada para el trabajo.
MelBurslan
1
grepNo es la mejor herramienta para imprimir la primera línea de un archivo. Si simplemente quiso decir que desea imprimir la primera línea coincidente grep, o si tiene algún uso específico grep, háganos saber de qué se trata. Si tuviéramos más contexto, quizás podríamos dar una respuesta que te ayudaría mejor a ti y a la comunidad.
DKing
@MelBurslan En file.txt tengo tres líneas, por ejemplo: Este es un archivo nuevo. Segunda línea: el nombre del archivo es nuevo Archivo Tercera línea: no he creado la nueva línea. Entonces, usando el comando grep, ¿cómo puedo imprimir solo la primera línea? Además, ¿qué comando me ayudará a imprimir la primera y la última línea? ¿Pueden ustedes decirme los comandos para ambas preguntas?
Nithin Santhosh
Si alguna de las respuestas existentes resuelve su problema, considere aceptarla a través de la marca de verificación. ¡Gracias!
Jeff Schaller
Respuestas:
38
Aunque es una aplicación no convencional de grep, puedes hacerlo usando
grep -m1 "" file.txt
Funciona porque la expresión vacía coincide con cualquier cosa, mientras que -m1hace que grep salga después de la primera coincidencia
-m NUM, --max-count=NUM
Stop reading a file after NUM matching lines.
+1 por mostrar que el plátano cubierto de chocolate no es tan inútil aquí como pensaba.
Kamil Maciorowski
44
Eso podría funcionar en algunos sistemas, pero no es portátil:grep: unknown option -- m
Kusalananda
1
Tenga en cuenta la diferencia entre 'primera línea' y 'primera línea coincidente'
Charles
13
Esto no es algo que grephace. El nombre "grep" en sí mismo es un acrónimo de " buscar globalmente una expresión regular e imprimir", que es lo que hace el edcomando g/re/p(para una expresión regular dada re).
edes un editor de línea interactivo de 1969, pero probablemente esté instalado en su sistema hoy. Obtuvimos grepde ed, y puede verse como un acceso directo o alias para una funcionalidad específica de ed, y sed, que es "stream- ed", es decir, un editor de stream (no interactivo).
Usemos en su sedlugar:
$ sed -n '1p' file.txt
La 1pcadena es un pequeño sed"script" que imprime ( p) la línea correspondiente a la dirección dada ( 1, la primera línea). Por cierto, el comando de edición 1pharía (no es de extrañar) hacer lo mismo en el ededitor.
El -nsuprime la salida de cualquier elemento no impresa explícitamente por el guión, así que todo lo que tenemos es la primera línea del archivo file.txt.
Alternativamente:
$ sed '1q' file.txt
Esto imprime todas las líneas del archivo, pero se cierra ( q) en la línea 1 (después de imprimirlo). Esto es exactamente equivalente a head -n 1 file.txt.
En el estándar POSIX dice (generalizando) que head -n Nes muy similar a sed 'Nq', es decir, "imprime cada línea, pero cierra en la línea N". La razón por la que headse incluyó en el estándar se debió a la simetría con tail(y la compatibilidad con las implementaciones de Unix existentes).
Esta es la respuesta más esclarecedora, la primera respuesta es un truco extraño. Sabía que había algo extraño, gracias por mostrarme la historia de grep and ed. Todo tiene sentido ahora.
Tomas Zubiri
6
A menos que la primera línea tenga una cadena única, no puede hacer esto usando solo grep. head -n 1 file.txtfuncionaría en su lugar.
Si solo desea imprimir la primera línea si coincide con un patrón, coloque el cabezal en grep
Otro uso no convencional de Grep: una transformación de Schwartz que pasa por varios giros para numerar las líneas, luego usa grep para buscar el número de línea, luego quita el número de línea:
Estoy poniendo esta respuesta aquí como un ejemplo de la idea de que sólo porque usted puede hacer algo en (grep o bash o ... etc), no significa que usted debe - es probable que haya una mejor herramienta para el trabajo. sed ( sed 1qor sed -n 1p) y head ( head -n 1) son las herramientas más apropiadas para imprimir la primera línea desde un archivo. Para imprimir la última línea de un archivo, tiene tail -n 1osed -n '$p'. Estas herramientas no solo son un solo comando (en lugar de 3+ en las funciones anteriores), sino que también son mucho más claras para futuros lectores, ¡tal vez usted mismo! - de los guiones en los que están. Aunque no soy uno de los (actualmente 3) votantes negativos de su pregunta, es probable que su insistencia en una herramienta arbitraria para el trabajo (sin ninguna razón de apoyo) sea la razón de Los votos negativos. Es muy poco probable que un sistema que tiene grepno tenga también head, taily sed.
head -1 file.txt
no funciona?grep
No es la mejor herramienta para imprimir la primera línea de un archivo. Si simplemente quiso decir que desea imprimir la primera línea coincidentegrep
, o si tiene algún uso específicogrep
, háganos saber de qué se trata. Si tuviéramos más contexto, quizás podríamos dar una respuesta que te ayudaría mejor a ti y a la comunidad.Respuestas:
Aunque es una aplicación no convencional de grep, puedes hacerlo usando
Funciona porque la expresión vacía coincide con cualquier cosa, mientras que
-m1
hace que grep salga después de la primera coincidenciafuente
grep: unknown option -- m
Esto no es algo que
grep
hace. El nombre "grep" en sí mismo es un acrónimo de " buscar globalmente una expresión regular e imprimir", que es lo que hace eled
comandog/re/p
(para una expresión regular dadare
).ed
es un editor de línea interactivo de 1969, pero probablemente esté instalado en su sistema hoy. Obtuvimosgrep
deed
, y puede verse como un acceso directo o alias para una funcionalidad específica deed
, ysed
, que es "stream-ed
", es decir, un editor de stream (no interactivo).Usemos en su
sed
lugar:La
1p
cadena es un pequeñosed
"script" que imprime (p
) la línea correspondiente a la dirección dada (1
, la primera línea). Por cierto, el comando de edición1p
haría (no es de extrañar) hacer lo mismo en eled
editor.El
-n
suprime la salida de cualquier elemento no impresa explícitamente por el guión, así que todo lo que tenemos es la primera línea del archivofile.txt
.Alternativamente:
Esto imprime todas las líneas del archivo, pero se cierra (
q
) en la línea 1 (después de imprimirlo). Esto es exactamente equivalente ahead -n 1 file.txt
.En el estándar POSIX dice (generalizando) que
head -n N
es muy similar ased 'Nq'
, es decir, "imprime cada línea, pero cierra en la líneaN
". La razón por la quehead
se incluyó en el estándar se debió a la simetría contail
(y la compatibilidad con las implementaciones de Unix existentes).fuente
A menos que la primera línea tenga una cadena única, no puede hacer esto usando solo grep.
head -n 1 file.txt
funcionaría en su lugar.Si solo desea imprimir la primera línea si coincide con un patrón, coloque el cabezal en grep
head -n 1 * | grep [pattern]
fuente
Otro uso no convencional de Grep: una transformación de Schwartz que pasa por varios giros para numerar las líneas, luego usa grep para buscar el número de línea, luego quita el número de línea:
Estoy poniendo esta respuesta aquí como un ejemplo de la idea de que sólo porque usted puede hacer algo en (grep o bash o ... etc), no significa que usted debe - es probable que haya una mejor herramienta para el trabajo. sed (
sed 1q
orsed -n 1p
) y head (head -n 1
) son las herramientas más apropiadas para imprimir la primera línea desde un archivo. Para imprimir la última línea de un archivo, tienetail -n 1
osed -n '$p'
. Estas herramientas no solo son un solo comando (en lugar de 3+ en las funciones anteriores), sino que también son mucho más claras para futuros lectores, ¡tal vez usted mismo! - de los guiones en los que están. Aunque no soy uno de los (actualmente 3) votantes negativos de su pregunta, es probable que su insistencia en una herramienta arbitraria para el trabajo (sin ninguna razón de apoyo) sea la razón de Los votos negativos. Es muy poco probable que un sistema que tienegrep
no tenga tambiénhead
,tail
ysed
.fuente