Quelle est la différence entre “$ line” et “^ $ line”

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