Utilisez bash pour lire ligne par ligne et de garder de l'espace
Lorsque j'utilise "cat test.fichier", il montrera
1
2
3
4
Lorsque j'utilise le fichier bash,
cat test.file |
while read data
do
echo "$data"
done
Il va montrer
1
2
3
4
Comment pourrais-je faire la suite tout comme l'original fichier de test?
- On peut trouver utile de script en ligne pour ajouter des numéros de ligne à stdio:
{ i=0; while read; do i=$(dc 1 $i + p); printf "%4 d $REPLY\n" $i; done; }
Il est compatible avec les anciens SH.
Vous devez vous connecter pour publier un commentaire.
Je me rends compte que vous pourriez avoir simplifié l'exemple de quelque chose qui avait vraiment besoin d'un pipeline, mais avant que quelqu'un d'autre, dit-il:
while IFS= read data; ...
export IFS
..., bon je vous lis conseil!IFS= read -r line
afin d'éviter toute interprétation des barres obliques inverses.En fait, si vous ne fournissez pas un argument pour le "lire" appel, la lecture de définir une valeur par défaut de la variable appelée $REPONSE qui permettra de préserver les espaces. Ainsi, vous pouvez simplement faire ceci:
read
."$REPLY"
. Je downvoted la réponse, et maintenant le vote est verrouillé :(. Je suis désolé. Puis-je vous dérange à s'il vous plaît faire une petite modification pour que je puisse le changer?\n
dans votre fichier source (c'est à dire le code source),read
va les convertir justen
. Utilisationread -r
pour l'en empêcher.while read line;
$REPLY
solution ne fonctionne pas dans ZSH, mais leIFS= read
solution fonctionne dans les deux ZSH, Bash, et.Juste pour compléter DigitalRoss de réponse.
Au cas où vous souhaitez modifier la FI juste pour cette commande, vous pouvez utiliser des accolades. Si vous le faites, la valeur de FI sera modifié qu'à l'intérieur du bloc.
Comme ceci:
De la sortie (en gardant des espaces):
IFS
déjà récupère cet exemple particulier, vous devez toujours citer"$line"
. Dans un exemple réel, la valeur pourrait encore contenir des caractères génériques du shell et de ce pas.read data
fractionne les données par FI, qui est généralement "\t\n". Cela permettra de préserver les espaces:Vous pouvez également utiliser un bon outil d'analyse de fichier, comme
awk