GNU/Linux >> Tutoriels Linux >  >> Linux

Comment lire des fichiers ligne par ligne dans Bash

Présentation

La lecture d'un fichier ligne par ligne vous permet de traiter efficacement le contenu d'un fichier et de sortir chaque ligne comme un élément dans une liste. Après avoir affiché chaque ligne séparément, recherchez ou associez facilement un contenu spécifique.

L'un des moyens de lire un fichier texte en lignes individuelles consiste à utiliser le shell Bash.

Dans ce didacticiel, vous apprendrez à lire un fichier ligne par ligne dans Bash.

Prérequis

  • Un système exécutant Linux.
  • Accès à un terminal (Ctrl + Alt + T ).
  • Un éditeur de texte (tel que Nano ou vi/vim).

Lire ligne par ligne dans Bash

Il existe plusieurs méthodes pour lire un fichier ligne par ligne à l'aide de Bash. Les sections suivantes mettent en évidence cinq méthodes pour traiter un fichier une ligne à la fois à l'aide de Bash.

Méthode 1 :Utilisation de la commande de lecture et de la boucle While

La première méthode consiste à utiliser la commande read et un while boucle dans un script Bash. Bien qu'il soit possible de faire la même chose dans un terminal, les scripts Bash enregistrent le code et le rendent réutilisable. Suivez les étapes ci-dessous :

1. Ouvrez le terminal (Ctrl + Alt + T ) et créez un nouveau script Bash à l'aide d'un éditeur de texte tel que vi/vim :

vi line.sh

2. Saisissez les lignes suivantes :

#!/bin/bash
file="days.txt"
while read -r line; do
echo -e "$line\n"
done <$file
  • Le $file La variable est définie après la ligne shebang (la première ligne dans les scripts Bash), et elle stocke le chemin d'accès au fichier d'entrée que vous souhaitez traiter.
  • Le -r argument ajouté au read La commande empêche l'interprétation des caractères échappés par une barre oblique inverse lors de la lecture du contenu du fichier.
  • Le contenu de chaque ligne est stocké dans la $line variable. Dans le while loop, la commande echo imprime la $line contenu de la variable. Le -e l'argument autorise echo pour interpréter les caractères spéciaux tels que le caractère de retour à la ligne \n .
  • Le while la boucle continue jusqu'à ce qu'elle atteigne la fin du fichier et que la boucle se termine.

3. Enregistrez le script et quittez vi :

:wq

4. Exécutez le script :

bash line.sh

Le script affiche chaque ligne de l'exemple de fichier texte séparément.

Méthode 2 :Utilisation de la commande cat et de la boucle for

Une autre méthode pour afficher le contenu d'un fichier sur des lignes individuelles consiste à utiliser la commande cat et le for boucle. Le for la boucle permet echo pour imprimer les lignes du cat sortie de la commande jusqu'à ce qu'elle atteigne la fin du fichier.

Suivez les étapes ci-dessous :

1. Créez un nouveau script :

vi readfile.sh

2. Saisissez les lignes suivantes :

#!/bin/bash
file=$(cat days.txt)
for line in $file
do
echo -e "$line\n"
done
  • Le $file la variable stocke le contenu du fichier d'entrée en utilisant le cat commande.
  • Le for la boucle parcourt chaque ligne du cat la sortie de la commande et l'imprime en utilisant le echo commande jusqu'à ce qu'elle atteigne la fin du fichier.

3. Enregistrez le script et quittez vi :

:wq

4. Exécutez le script :

bash readfile.sh

Le script affiche le contenu du fichier ligne par ligne dans la sortie standard.

Méthode 3 :Utiliser ici des chaînes

Une autre méthode pour imprimer le contenu d'un fichier ligne par ligne consiste à utiliser un here chaîne pour transmettre le contenu du fichier à la read commande. Le here string relie le contenu d'une variable, d'une chaîne ou d'un fichier spécifié après le <<< syntaxe à l'entrée standard du programme appelé.

Suivez les étapes ci-dessous :

1. Créez un nouveau script Bash :

vi herestrings.sh

2. Saisissez les lignes suivantes :

#!/bin/bash
while IFS= read -r line; do
printf '%s\n' "$line"
done <<< $(cat days.txt )
  • Dans le while boucle, le IFS= l'argument est une chaîne vide pour éviter de couper les espaces blancs.
  • Le -r l'argument empêche l'interprétation des caractères échappés par une barre oblique inverse.
  • Le printf La commande imprime chaque ligne du fichier. Les spécificateurs de format traitent l'entrée comme une chaîne (%s ) et ajoutez un caractère de saut de ligne (\n ) après chaque ligne.
  • Le here la chaîne alimente le cat la sortie de la commande au read commande.

3. Enregistrez le script et quittez l'éditeur :

:wq

4. Exécutez le script :

bash herestrings.sh

La sortie imprime le contenu du fichier ligne par ligne.

Méthode 4 :Utilisation des descripteurs de fichier

Un descripteur de fichier fait référence à un fichier ou à un processus ouvert. Chaque processus a trois descripteurs de fichier par défaut :

  • 0 . Entrée standard.
  • 1 . Sortie standard.
  • 2 . Erreur standard.

Fournissez l'entrée pour la read commande à l'aide d'un descripteur de fichier et affiche chaque ligne du contenu du fichier séparément. Suivez les étapes ci-dessous :

1. Créez un nouveau script bash :

vi descriptors.sh

2. Saisissez les lignes suivantes :

#!/bin/bash
while IFS= read -r -u9 line; do
printf '%s\n' "$line"
done 9< days.txt
  • Dans le while boucle, indiquez au read commande pour lire l'entrée d'un descripteur de fichier en spécifiant le -u argument et le numéro de descripteur de fichier.

Important : Lorsque vous spécifiez des descripteurs de fichiers, utilisez un nombre compris entre 4 et 9 pour éviter tout conflit avec les descripteurs de fichiers shell internes.

  • Le printf la commande traite l'entrée $line variable sous forme de chaîne (%s ) et ajoute un caractère de saut de ligne (\n ) après avoir imprimé la $line contenu.
  • Le 9< la syntaxe contient le même numéro de descripteur de fichier que dans le while boucle. Le contenu du fichier d'entrée est envoyé au descripteur de fichier spécifié.

3. Enregistrez le script :

:wq

4. Exécutez le script pour tester le code :

bash descriptors.sh

La sortie du script imprime chaque ligne du fichier séparément.

Méthode 5 :Utilisation de la substitution de processus

La substitution de processus permet à la sortie standard d'un processus (ou de processus) d'apparaître sous la forme d'un fichier et de l'alimenter en entrée standard d'un autre processus. Utilisez la substitution de processus pour fournir le fichier d'entrée et imprimez chaque ligne de fichier séparément.

Suivez les étapes ci-dessous :

1. Créez un script Bash :

vi substitution.sh

2. Saisissez les lignes suivantes :

#!/bin/bash
while IFS= read -r line; do
printf '%s\n' "$line"
done < <(cat days.txt)
  • Après avoir bouclé la boucle, cat le fichier d'entrée entre parenthèses <(cat [input_file_path] pour envoyer le résultat du processus au read commande.

Important : Faites attention à ne pas ajouter de caractères blancs entre le < caractère et la parenthèse gauche ( . L'utilisation d'un caractère d'espacement interprète le code comme une redirection et génère une erreur.

3. Enregistrez le script :

:wq

4. Exécutez le script :

bash substitution.sh

Chaque ligne de fichier est imprimée séparément dans la sortie standard.


Linux
  1. Comment supprimer des fichiers et des répertoires sous Linux à partir de la ligne de commande

  2. Comment ajouter des numéros de ligne aux fichiers texte sous Linux

  3. Comment diviser et combiner des fichiers à partir de la ligne de commande sous Linux

  4. Boîte occupée lire le fichier ligne par ligne ?

  5. Dans Bash, comment ajouter une chaîne après chaque ligne dans un fichier ?

Comment tronquer des fichiers (vides) sous Linux

Comment rediriger stderr vers stdout dans Bash

Comment renommer un ou plusieurs fichiers sous Linux

Script bash :comment lire des données à partir de fichiers texte

Comment rechercher des fichiers avec des dizaines de critères avec la commande Bash Find

Comment compresser un fichier sous Linux