Je veux lire un fichier ligne par ligne dans les scripts Unix Shell. La ligne peut contenir des espaces de début et de fin et je souhaite lire ces espaces également dans la ligne. J'ai essayé avec "while read line" mais la commande read supprime les espaces de la ligne :( Exemple si line in file est: -
abcd efghijk
abcdefg hijk
la ligne doit être lue comme suit: - 1) "abcd efghijk" 2) " abcdefg hijk"
Ce que j'ai essayé est ceci (qui n'a pas fonctionné): -
while read line
do
echo $line
done < file.txt
Je veux une ligne comprenant des espaces et des caractères de tabulation. S'il vous plaît suggérer un moyen.
Essaye ça,
IFS=''
while read line
do
echo $line
done < file.txt
EDIT:
De man bash
IFS - The Internal Field Separator that is used for Word
splitting after expansion and to split lines into words
with the read builtin command. The default value is
``<space><tab><newline>''
Vous voulez lire les lignes raw pour éviter les problèmes de barres obliques inverses dans l'entrée (utilisez -r
):
while read -r line; do
printf "<%s>\n" "$line"
done < file.txt
Cela maintiendra les espaces dans la ligne, mais supprimera les espaces de début et de fin. Pour les conserver également, définissez l’IFS vide, comme dans
while IFS= read -r line; do
printf "%s\n" "$line"
done < file.txt
Ceci est maintenant un équivalent de cat < file.txt
aussi longtemps que file.txt
se termine par une nouvelle ligne.
Notez que vous devez faire une double citation "$line"
afin d'empêcher la division de Word de la ligne en plusieurs mots, perdant ainsi plusieurs séquences d'espaces.