Il existe un fichier crashcourse_test.txt avec le contenu suivant :
# cat crashcourse_test.txt
1001|Anvils R Us|123 Main Street|Southfield|MI|48075|USA
1002|LT Supplies|500 Park Street|Anytown|OH|44333|USA
1003|ACME|555 High Street|Los Angeles|CA|90046|USA
1004|Furball Inc.|1000 5th Avenue|New York|NY|11111|USA
1005|Jet Set|42 Galaxy Road|London|NULL|N16 6PS|England
1006|Jouets Et Ours|1 Rue Amusement|Paris|NULL|45678|France
#
Le contenu du script while_read.sh est le suivant. Le but est d'utiliser le contenu du fichier ci-dessus comme entrée standard, de le transmettre dans la boucle while read et de remplacer la chaîne "USA" dans chaque ligne par "XXXXXXXXX" via le script while_read.sh. commande sed :
#!/bin/bash
while read line
do
sed 's/USA/XXXXXXXXX/'
done < crashcourse_test.txt
Le résultat de sortie est :
# ./while_read.sh
1002|LT Supplies|500 Park Street|Anytown|OH|44333|XXXXXXXXX
1003|ACME|555 High Street|Los Angeles|CA|90046|XXXXXXXXX
1004|Furball Inc.|1000 5th Avenue|New York|NY|11111|XXXXXXXXX
1005|Jet Set|42 Galaxy Road|London|NULL|N16 6PS|England
1006|Jouets Et Ours|1 Rue Amusement|Paris|NULL|45678|France
#
Vous pouvez voir que la ligne 1001 contient la chaîne "USA" (qui se trouve être la première ligne du fichier), qui répond aux exigences de remplacement, mais le résultat est que cette ligne n'est pas affichée.
Je connais le moyen de le sortir correctement, ce qui peut être réalisé en utilisant echo $line | sed 's/USA/XXXXXXXXX/'
.
Mais je veux connaître la raison pour laquelle seule la première ligne de sortie est manquée. Où va la première ligne après avoir entré le while read comme entrée standard ?
Tout d’abord, votre utilisation de
sed
est peut-être erronée.Son paramètre est un fichier, votre variable
.line
n'est pas utiliséeEn produisant seulement un 3, cela signifie que la boucle n'est exécutée qu'une seule fois Donc votre redirection de fichier
utilisez tout après< > et
< crashcourse_test.txt
实际上被作为read
的输入和sed
的输入,并且sed
将read
entrée, etread
comme entrée, vous n'avez donc pas utilisé la première ligne d'entrée.🎜