web-dev-qa-db-fra.com

Comment trouver une ligne commençant par 'a' et finissant par 'c' en utilisant grep?

J'ai un fichier nommé newfile. Le contenu de ce fichier est:

abc
xyz
abc

Maintenant, je veux trouver des lignes qui commencent par a et se terminent par c. J'entre la commande suivante mais les résultats ne sont pas les mêmes que ceux attendus par moi:

grep -E   '^ac$' newfile

Le problème avec cette commande est que, lorsque j'utilise ^ac$, la commande l'interprète en commençant par ac au lieu de a.

1
Kishan Kumar

Le problème avec cette commande est que lorsque j'utilise ^ ac $, la commande l'interprète en commençant par 'ac' au lieu de commencer par 'a'.

Pas vraiment. Puisque vous avez utilisé le $ ancre , vous recherchez les lignes qui se terminent juste après la chaîne ac, de sorte que seules les lignes contenant exactement unique ac et pas plus les caractères sont appariés.

Pour autoriser les caractères compris entre ces lettres, utilisez l'expression régulière pour tout décompte de caractères: .* (ou si vous souhaitez autoriser un seul caractère comme dans abc dans l'exemple, utilisez .. sans quantificateurs comme *.)

En passant, vous pouvez simplement laisser l'option -E pour cette regex, car elle n'implique aucune syntaxe différente dans ces deux variantes.

Le résultat est donc:

grep '^a.*c$' newfile
4
Melebius