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é auread
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 lewhile
loop, la commande echo imprime la$line
contenu de la variable. Le-e
l'argument autoriseecho
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 lecat
commande.
- Le
for
la boucle parcourt chaque ligne ducat
la sortie de la commande et l'imprime en utilisant leecho
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, leIFS=
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 lecat
la sortie de la commande auread
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 auread
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 lewhile
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 auread
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.