Quelqu'un peut-il expliquer pourquoi ce code ne fonctionne pas comme prévu? Je ne m'attendrais pas à ce qu'il corresponde au premier caractère, mais avec des caractères littéraux, mais les caractères génériques (.) Et caractères se comportent étrangement:grep: "^." ne correspond pas correctement
J'utilise -o juste pour montrer exactement comment les objets correspondent, il ne fait pas Ne changez pas ce qui correspond du tout.
$ echo foo | grep -o '^.'
f
o
o
Certains comportements plus inattendus:
$ echo foobarbazquux | grep -o '^[foarqux]'
f
o
o
$ echo foobarbazquux | grep -o '^.[^u]'
fo
ob
ar
ba
zq
esentially le matcher début de ligne (^) ne se comporte pas comme prévu dans ces cas. Y at-il un moyen de le faire se comporter plus normalement?
Est-ce que ça marche vraiment mal si vous n'utilisez pas -o? Ma conjecture est que -o sortie peut être produite avant d'appliquer des ancres. – ninjalj
Je vois exactement le même comportement avec GNU grep 2.5.1. C'est comme si grep recommençait la recherche après chaque match. Un autre cas de test: 'echo foobarfoo | egrep -o 'foo |^bar'' affiche 'foo',' bar', 'foo'. –
Pour ce que ça vaut, je pourrais reproduire ce comportement sur mon terminal OSX avec grep 2.5.1. Encore plus mystérieusement, '$' fonctionne comme prévu - mais pas '^'. –