Disons que j'ai un fichier contenant les deux lignes suivantes:
2014-05-05 09:11:53 /aa/bbbb/cccccc 29899
2014-05-05 09:12:17 /aa/bbbb/cccccc?dddddddd 16767
J'ai besoin d'obtenir la ligne contenant /aa/bbbb/cccccc
uniquement le motif , je n'ai pas besoin de la deuxième ligne contenant des caractères supplémentaires, c'est-à-dire ?dddddddd
. Maintenant, quand j'ai essayé
grep '/aa/bbbb/cccccc' file
Ensuite, les deux lignes sélectionnées. J'ai besoin de la gamme complète, donc grep -o
je ne pourrais pas être une solution.
Quelle pourrait être la solution possible en utilisant grep afin que seule la première ligne soit sélectionnée en fonction du modèle de recherche?
la source
grep '/aa/bbbb/cccccc ' file
/aa/bbbb/cccccc
chaîne.grep -E '/aa/bbbb/cccccc(\s+|$)' file
grep -E '(^|\s)/aa/bbbb/cccccc(\s|$)' file
La façon la plus simple serait d'ajouter un espace après votre motif:
Ou, pour correspondre à toutes sortes d'espaces:
Ou
Ou, avec un lookahead positif :
Ou, avec un lookahead négatif :
Ou vous pouvez inverser le match:
Ou, pour faire correspondre des lignes qui ne contiennent que votre motif (pas d'espace blanc de fin):
Ou, vous pouvez simplement utiliser un petit script:
En awk:
Ou, si vous ne savez pas dans quel domaine se trouve votre modèle
En Perl
la source
grep -v 'c?' file
explique pourquoi vous ne l'utilisez pasgrep -v '?' file
car le fichier ne contient que deux lignes.grep -v '?'
serait suffisant.Pour compléter la réponse de @AvinashRaj , vous pouvez également utiliser une commande comme celle-ci.
la source