Comment lire un fichier ligne par ligne dans le script Bash [3 Methods]

Lors de la rédaction d’un bash script, dépend du flux d’automatisation, parfois le script doit lire le contenu du fichier ligne par ligne. Ici, nous apprenons 3 méthodes dans un bash script pour lire le fichier ligne par ligne.

Méthode 1 : Utilisation du redirecteur d’entrée

Le moyen le plus simple de lire un fichier ligne par ligne est d’utiliser le redirecteur d’entrée dans une boucle while.

Pour le démontrer, nous avons créé un exemple de fichier nommé « mycontent.txt » et nous l’utiliserons tout au long de ce didacticiel.

$ cat mycontent.txt
This is a sample file
We are going through contents
line by line
to understand

Créons un script nommé ‘example1.sh’ qui utilise saisir réorienter et boucler.

$ more example1.sh
#!/bin/bash
while read y
do
echo "Line contents are : $y "
done < mycontent.txt

Comment ça fonctionne:

– Déclarer shell qui est “bash”
– Démarrage de la boucle while et sauvegarde du contenu de la ligne dans la variable “y”
– faire une partie de la boucle while (Point de départ)
– echo to print et “$y” signifie imprimer la valeur de la variable, c’est-à-dire la ligne
– Lecture du contenu du fichier à l’aide du redirecteur d’entrée “<" et fermeture avec done

Exécution du script et sortie :

$ ./example1.sh

Line contents are : This is a sample file
Line contents are : We are going through contents
Line contents are : line by line
Line contents are : to understand

Méthode 2 : Utilisation de la commande cat

La deuxième méthode consiste à utiliser la commande cat puis à envoyer son sortir comme saisir au moment boucler en utilisant le tuyau.

Créez un fichier de script ‘example2.sh’, avec comme contenu :

$ more example2.sh
#!/bin/bash
cat mycontent.txt | while read y

do
echo "Line contents are : $y "
done

Comment ça fonctionne:

– Déclarer shell qui est “bash”
– Sortie de la commande cat envoyée en entrée à la boucle while à l’aide de pipe
” | ” et sauvegarde du contenu de la ligne dans la variable “y”
– faire une partie de la boucle while (Point de départ)
– echo to print et “$y” signifie imprimer la valeur de la variable, c’est-à-dire la ligne
– Fermeture de la boucle while effectuée

Exécution du script et sortie :

$ ./example2.sh

Line contents are : This is a sample file
Line contents are : We are going through contents
Line contents are : line by line
Line contents are : to understand

Astuce : nous pouvons combiner toutes les commandes et les utiliser comme oneliners.

Sortir:

$ while read line; do echo $line; done < mycontent.txt
This is a sample file
We are going through contents
line by line
to understand

3. Utilisation du nom de fichier passé en argument

Cette troisième méthode enverra le nom de fichier en tant que argument d’entrée via la ligne de commande.

Créez un fichier de script nommé « example3.sh », comme :

$ more example3.sh
#!/bin/bash
while read y
do
echo "Line contents are : $y "
done < $1

Comment ça fonctionne:

– Déclarer shell qui est “bash”
– Démarrage de la boucle while et sauvegarde du contenu de la ligne dans la variable “y”
– faire une partie de la boucle while (Point de départ)
– echo to print et “$y” signifie imprimer la valeur de la variable, c’est-à-dire la ligne
– Lecture du contenu du fichier à partir de l’argument de la ligne de commande, c’est-à-dire $1 à l’aide du redirecteur d’entrée “<" et fermeture avec done

Exécution du script et sortie :

$ ./example3.sh mycontent.txt 

Line contents are : This is a sample file
Line contents are : We are going through contents Output of Script
Line contents are : line by line
Line contents are : to understand

Gestion de la barre oblique inverse et du caractère d’échappement

Lorsque le contenu du fichier contient une barre oblique inverse et des caractères d’échappement, la commande read permet d’ignorer ces barres obliques inverses et ces caractères d’échappement.

Si nous voulons tout lire dans le fichier, utilisez -r option pour empêcher les échappements de barre oblique inverse d’être interprétés et afficher la valeur dans la console.

Si le contenu du fichier a un séparateur de fichier comme une virgule ou un tube, nous pouvons utiliser IFS (Internal Field Separator) pour diviser le fichier en fonction du délimiteur et afficher les valeurs.

Exemple de script shell :

#!/bin/bash
inputfile="foobar.txt"
while IFS=, read -r y
do
echo $y
done < $inputfile

Flux de script :

– Affectez le chemin du fichier à la variable ‘inputfile’
– Pendant que la boucle lit le fichier ligne par ligne
– -r empêche l’interprétation des échappements antislash
– IFS (Internal Field Separator), si nous voulons diviser la ligne avec un séparateur de champ, nous devons spécifier la valeur du séparateur (Ex: si la ligne a une valeur comme “foo, bar” et que nous voulons diviser la virgule, la valeur IFS doit être ( IFS=,))
– echo aidera à imprimer le contenu sur la console
– une fois atteint la fin du fichier tandis que la boucle sort

Conclusion

Ce tutoriel a expliqué comment lire le contenu d’un fichier ligne par ligne en utilisant bash script shell avec des exemples. Il aide à rechercher des chaînes dans un fichier en lisant les lignes individuellement.

Merci d’avoir lu, s’il vous plaît laissez vos suggestions et commentaires dans la section commentaire.