Comment obtenir la première ligne d’un fichier dans un script bash?

Je dois mettre dans une variable bash la première ligne d’un fichier. Je suppose que c’est avec la commande grep, mais il est possible de restreindre le nombre de lignes?

head prend les premières lignes d’un fichier et le paramètre -n permet de spécifier le nombre de lignes à extraire:

 line=$(head -n 1 filename) 

pour lire la première ligne à l’aide de bash, utilisez l’instruction read . par exemple

 read -r firstline 

firstline sera votre variable (pas besoin d'affecter à un autre)

 line=$(head -1 file) 

Travaillera bien (Comme réponse précédente). Mais

 line=$(read -r FIRSTLINE < filename) 

sera légèrement plus rapide car read est une commande intégrée bash.

Cela suffit et stocke la première ligne du filename de filename dans la variable $line :

 read -r line < filename 

J'aime aussi awk pour cela:

 awk 'NR==1 {print; exit}' file 

Pour stocker la ligne elle-même, utilisez la syntaxe var=$(command) . Dans ce cas, line=$(awk 'NR==1 {print; exit}' file) .

Ou même sed :

 sed -n '1p' file 

Avec la line=$(sed -n '1p' file) équivalente line=$(sed -n '1p' file) .


Voir un exemple quand on alimente la read avec seq 10 , soit une suite de nombres de 1 à 10:

 $ read -r line < <(seq 10) $ echo "$line" 1 $ line=$(awk 'NR==1 {print; exit}' <(seq 10)) $ echo "$line" 1 

La question n’a pas demandé quelle est la plus rapide, mais pour append à la réponse sed, -n ‘1p’ est mal performant car l’espace du pattern est toujours analysé sur les gros fichiers. Par curiosité, j’ai constaté que la «tête» l’emporte sur sed de manière étroite:

 # 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 

echo simplement la première liste de votre fichier source dans votre fichier cible.

 echo $(head -n 1 source.txt) > target.txt