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
$fileLa 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
-rargument ajouté aureadLa 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
$linevariable. Dans lewhileloop, la commande echo imprime la$linecontenu de la variable. Le-el'argument autoriseechopour interpréter les caractères spéciaux tels que le caractère de retour à la ligne\n.
- Le
whilela 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
$filela variable stocke le contenu du fichier d'entrée en utilisant lecatcommande.
- Le
forla boucle parcourt chaque ligne ducatla sortie de la commande et l'imprime en utilisant leechocommande 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
whileboucle, leIFS=l'argument est une chaîne vide pour éviter de couper les espaces blancs.
- Le
-rl'argument empêche l'interprétation des caractères échappés par une barre oblique inverse.
- Le
printfLa 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
herela chaîne alimente lecatla sortie de la commande aureadcommande.
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
whileboucle, indiquez aureadcommande pour lire l'entrée d'un descripteur de fichier en spécifiant le-uargument 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
printfla commande traite l'entrée$linevariable sous forme de chaîne (%s) et ajoute un caractère de saut de ligne (\n) après avoir imprimé la$linecontenu.
- Le
9<la syntaxe contient le même numéro de descripteur de fichier que dans lewhileboucle. 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,
catle fichier d'entrée entre parenthèses<(cat [input_file_path]pour envoyer le résultat du processus aureadcommande.
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.