GNU/Linux >> Tutoriels Linux >  >> Linux

Comment boucler sur les lignes d'un fichier ?

Supposons que j'ai ce fichier :

hello
world
hello world

Ce programme

#!/bin/bash

for i in $(cat $1); do
    echo "tester: $i"
done

sorties

tester: hello
tester: world
tester: hello
tester: world

J'aimerais avoir le for parcourir chaque ligne individuellement en ignorant les espaces, c'est-à-dire que les deux dernières lignes doivent être remplacées par

tester: hello world

Utilisation des guillemets for i in "$(cat $1)"; résultats en i se voir attribuer l'ensemble du dossier en une seule fois. Que dois-je changer ?

Réponse acceptée :

(9 ans plus tard :)
Les deux réponses fournies échoueraient sur les fichiers sans nouvelle ligne à la fin, cela sauterait effectivement la dernière ligne, ne produirait aucune erreur, conduirait à un désastre (appris à la dure :).

La meilleure solution concise que j'ai trouvée jusqu'à présent "Just Works" (à la fois en bash et en sh):

while IFS='' read -r LINE || [ -n "${LINE}" ]; do
    echo "processing line: ${LINE}"
done < /path/to/input/file.txt

Pour une discussion plus approfondie, consultez cette discussion sur StackOverflow :Comment utiliser "pendant la lecture" (Bash) pour lire la dernière ligne d'un fichier s'il n'y a pas de nouvelle ligne à la fin du fichier ?

Attention :cette approche ajoute une nouvelle ligne supplémentaire à la dernière ligne s'il n'y en a pas déjà.


Linux
  1. Comment insérer du texte avant la première ligne d'un fichier ?

  2. Comment ajouter plusieurs lignes à un fichier ?

  3. Comment compter le nombre de lignes dans un fichier après une correspondance Grep ?

  4. Comment compter les lignes d'un fichier sous UNIX/Linux

  5. Comment puis-je ajouter une chaîne au début de chaque ligne dans un fichier ?

Comment supprimer des lignes d'un fichier à l'aide de la commande Sed

Comment trouver la ou les lignes les plus longues dans un fichier sous Linux

Comment afficher des lignes spécifiques d'un fichier dans la ligne de commande Linux

Comment utiliser les lignes d'un fichier comme arguments d'une commande ?

Comment lire l'avant-dernière ligne d'un fichier avec Bash ?

Comment utiliser sed pour supprimer les n dernières lignes d'un fichier