reemplazar - ¿Cómo obtener la primera línea de un archivo en un script bash?
sed reemplazar/ (6)
Tengo que poner una variable bash en la primera línea de un archivo. Supongo que es con el comando grep, pero ¿hay alguna forma de restringir el número de líneas?
Esto es suficiente y almacena la primera línea de filename
de filename
en la variable $line
:
read -r line < filename
También me gusta awk
por esto:
awk ''NR==1 {print; exit}'' file
Para almacenar la línea en sí, use la sintaxis var=$(command)
. En este caso, line=$(awk ''NR==1 {print; exit}'' file)
.
O incluso sed
:
sed -n ''1p'' file
Con la line=$(sed -n ''1p'' file)
equivalente line=$(sed -n ''1p'' file)
.
Vea una muestra cuando alimentamos la read
con la secuencia seq 10
, es decir, una secuencia de números del 1 al 10:
$ read -r line < <(seq 10)
$ echo "$line"
1
$ line=$(awk ''NR==1 {print; exit}'' <(seq 10))
$ echo "$line"
1
La pregunta no preguntó cuál es la más rápida, pero para agregar a la respuesta sed, -n ''1p'' tiene un rendimiento incorrecto ya que el espacio del patrón aún se escanea en archivos grandes. Por curiosidad, descubrí que ''cabeza'' gana por sed de manera estrecha:
# best:
head -n1 $bigfile >/dev/null
# a bit slower than head (I saw about 10% difference):
sed ''1q'' $bigfile >/dev/null
# VERY slow:
sed -n ''1p'' $bigfile >/dev/null
Solo echo
la primera lista de su archivo de origen en su archivo de destino.
echo $(head -n 1 source.txt) > target.txt
para leer la primera línea usando bash, use la instrucción read
. p.ej
read -r firstline<file
firstline
será su variable (No es necesario asignar a otro)
head
toma las primeras líneas de un archivo y el parámetro -n
se puede usar para especificar cuántas líneas se deben extraer:
line=$(head -n 1 filename)
line=$(head -1 file)
Funcionará bien (Como respuesta anterior). Pero
line=$(read -r FIRSTLINE < filename)
será marginalmente más rápido ya que read
es un comando bash incorporado.