J'ai ceux-ci:
$ cat a.tmp
ABB.log
ABB.log.122
ABB.log.123
Je voulais trouver une correspondance exacte de ABB.log.
Mais quand j'ai fait
$ grep -w ABB.log a.tmp
ABB.log
ABB.log.122
ABB.log.123
il montre tous.
Puis-je obtenir ce que je voulais en utilisant grep?
Spécifiez simplement les ancres des expressions rationnelles.
grep '^ABB\.log$' a.tmp
grep -Fx ABB.log a.tmp
Depuis la page de manuel de grep:
- F, --fixed-strings
Interprète PATTERN comme une (liste de) chaînes fixes
- x, --line-regexp
Sélectionnez uniquement les correspondances qui correspondent exactement à la ligne entière.
Voici ce que je fais, bien que l'utilisation d'ancres soit le meilleur moyen:
grep -w "ABB.log " a.tmp
de même avec awk
awk '/^ABB\.log$/' file
La plupart des suggestions échoueront s'il ne s'agit que d'un seul espace de début ou de fin, ce qui serait important si le fichier est modifié à la main. Cela le rendrait moins susceptible dans ce cas:
grep '^[[:blank:]]*ABB\.log[[:blank:]]*$' a.tmp
Une simple boucle de lecture en boucle dans Shell ferait implicitement ceci:
while read file
do
case $file in
(ABB.log) printf "%s\n" "$file"
esac
done < a.tmp
Cela a bien fonctionné pour moi lorsque j'essayais de faire quelque chose de similaire:
grep -F ABB.log a.tmp