Ubuntu - Linux : Gestion des fichiers avec la ligne de commandes
Table des matières:
- Lire un fichier ligne par ligne de syntaxe
- Lecture d'un fichier Exemples ligne par ligne
- Méthodes alternatives de lecture de fichiers
- Utilisation d'une substitution de processus
- Utilisation d'une chaîne Here
- Utilisation du descripteur de fichier
- Conclusion
Lors de l'écriture de scripts Bash, vous vous retrouverez parfois dans des situations où vous devrez lire un fichier ligne par ligne. Par exemple, vous pouvez avoir un fichier texte contenant des données qui doivent être traitées par le script.
Dans ce tutoriel, nous verrons comment lire un fichier ligne par ligne dans Bash.
Lire un fichier ligne par ligne de syntaxe
La syntaxe la plus générale pour lire un fichier ligne par ligne est la suivante:
while IFS= read -r line do echo "$line" done < input_file
ou la version monoligne équivalente:
while IFS= read -r line; do echo $line; done < input_file
Comment ça marche?
Le fichier d'entrée (
input_file
) est le nom du fichier que vous souhaitez ouvrir en lecture par la commande de
read
. La commande de lecture lit le fichier ligne par ligne, en affectant chaque ligne à la variable de
line
. Une fois toutes les lignes traitées, la boucle while se terminera. Le séparateur de champ interne (
IFS
) est défini sur la chaîne nulle pour conserver les espaces blancs de début et de fin, qui est le comportement par défaut de la commande de
read
.
Lecture d'un fichier Exemples ligne par ligne
Jetons un coup d'œil à l'exemple suivant. Supposons que nous ayons un fichier nommé
distros.txt
contenant une liste de certaines des distributions Linux les plus populaires et leurs gestionnaires de paquets séparés par une virgule (
,
):
Ubuntu, apt Debian, apt CentOS, yum Arch Linux, pacman Fedora, dnf
Pour lire le fichier ligne par ligne, vous devez exécuter le code suivant dans votre terminal:
while IFS= read -r line do echo "$line" done < distros.txt
Le code lira le fichier par ligne, assignera chaque ligne à une variable et fera écho à la variable. Fondamentalement, vous verriez la même sortie que si vous affichez le contenu du fichier à l'aide de la commande cat.
Et si vous souhaitez imprimer uniquement les distributions qui utilisent apt? Une façon serait d'utiliser l'instruction if et de vérifier si la ligne contient la sous-chaîne apt:
while IFS= read -r line do if]; then echo "$line" fi done < distros.txt
Ubuntu, apt Debian, apt
Lors de la lecture d'un fichier ligne par ligne, vous pouvez également transmettre plusieurs variables à la commande read qui divisera la ligne en champs basés sur l'
IFS
. Le premier champ est affecté à la première variable, le second à la deuxième variable, etc. S'il y a plus de champs que de variables, les champs restants sont affectés à la dernière variable.
Dans l'exemple suivant, nous définissons IFS sur une virgule (
,
) et passons deux variables
distro
et
pm
à la commande de lecture. Tout depuis le début de la ligne jusqu'à la première virgule sera affecté à la première variable (
distro
) et le reste de la ligne sera affecté à la deuxième variable (
pm
):
while IFS=, read -r distro pm do echo "$pm" is the package manager for "$distro" done < distros.txt
apt is the package manager for Ubuntu apt is the package manager for Debian yum is the package manager for CentOS pacman is the package manager for Arch Linux dnf is the package manager for Fedora
Méthodes alternatives de lecture de fichiers
Utilisation d'une substitution de processus
La substitution de processus vous permet de passer la sortie de la commande en tant que nom de fichier:
while IFS= read -r line do echo "$line" done < <(cat input_file)
Utilisation d'une chaîne Here
Here String est une variante du document Here. La chaîne
(cat input_file)
conservera les sauts de ligne:
while IFS= read -r line do echo "$line" done <<< $(cat input_file)
Utilisation du descripteur de fichier
Vous pouvez également fournir l'entrée à la boucle à l'aide d'un descripteur de fichier:
while IFS= read -r -u9 line do echo "$line" done 9< input_file
Lorsque vous travaillez avec des descripteurs de fichiers, utilisez un nombre compris entre 4 et 9 pour éviter tout conflit avec les descripteurs de fichiers internes du shell.
Conclusion
Dans Bash, nous pouvons lire un fichier ligne par ligne en fournissant le nom de fichier en entrée d'une boucle de lecture while.
terminal bashSelon les recommandations énoncées dans un rapport publié vendredi par la Federal Trade Commission (FTC) des États-Unis, les consommateurs comprendraient mieux comment leurs données sont recueillies et utilisées par les principaux acteurs de l'univers mobile. Le rapport de la FTC, basé sur une série d'ateliers sur la protection des renseignements personnels tenus l'année dernière par la commission, recommande les «meilleures pratiques» pour les fournisseurs de plateformes mobiles, les développeu
[Plus d'informations: Comment supprimer les logiciels malveillants de votre PC Windows]
Comment synchroniser et lire vos articles instapaper hors ligne
Apprenez à synchroniser et à lire vos articles Instapaper hors ligne.
Comment lire rapidement des vidéos en ligne sur des lecteurs multimédias de bureau
Apprenez à lire rapidement des vidéos en ligne sur des lecteurs multimédias de bureau, comme Windows Media Player.