Vous pouvez utiliser grep, comme l'indiquent les autres réponses. Mais vous n'avez pas besoin de grep, awk, sed, perl, cut, ou tout autre outil externe. Vous pouvez le faire avec du bash pur.
Essayez ceci (les points-virgules sont là pour vous permettre de tout mettre sur une seule ligne) :
$ while read line;
do
if [[ "${line%%:\ *}" == "potato" ]];
then
echo ${line##*:\ };
fi;
done< file.txt
## indique à bash de supprimer la plus longue correspondance de " : " dans $line.
$ while read line; do echo ${line##*:\ }; done< file.txt
1234
5678
5432
4567
5432
56789
ou si vous voulez la clé plutôt que la valeur, %% dit à bash de supprimer la plus longue correspondance de " : " dans $line à partir de la fin.
$ while read line; do echo ${line%%:\ *}; done< file.txt
potato
apple
potato
grape
banana
sushi
La sous-chaîne à séparer est ":\" car le caractère espace doit être échappé par la barre oblique inverse.
Vous trouverez d'autres exemples de ce type sur le site le projet de documentation linux .