Il y a une boucle while read:
while read line; do grep "^$line" file1 done < target
Je devrais utiliser "^$line"
pour obtenir la bonne réponse. Je veux savoir quelle est la différence entre "$line"
et "^$line"
?
La boucle while n’est pas pertinente ici, c’est la commande grep
qui rend le ^
important. Le caractère ^
est un identifiant dans les expressions régulières. Il correspond au début de la ligne. Par conséquent, le grep "$line" file
correspond à toutes les lignes du fichier où $line
est une sous-chaîne, mais grep "^$line"
ne correspond qu’à celles qui commencent par $line
.
@ sudo_O a la bonne réponse à votre question. Cependant, vous pouvez omettre la boucle complètement:
grep -f target file1
C’est beaucoup plus efficace avec un simple appel à grep. Si vous avez besoin de l’ancre de ligne:
grep -f <(sed 's/^/^/' target) file1