J'ai un fichier nommé exemple
$ cat example
kali.pdf
linux.pdf
ubuntu.pdf
example.pdf.
this.pdf
grep .pdf
et quand j'utilise grep
pour obtenir la ligne qui a un espace avant .pdf
, je n'arrive pas à l'obtenir.
grep *.pdf example
ne renvoie rien (je veux dire "grep, correspond à zéro ou plusieurs espaces avant .pdf
", mais aucun résultat)
et si j'utilise:
grep i*.pdf example
kali.pdf
linux.pdf
ubuntu.pdf
example.pdf.
this.pdf
grep .pdf
toutes les lignes reviennent, parce que je dis "grep, correspond moi i
une fois ou zéro, ok."
et enfin:
grep " *.pdf" example
aucun résultat ne revient
Pour cet exemple, je veux voir
grep .pdf
en sortie
Quel est le problème avec ma pensée?
Assurez-vous de citer votre expression. Je pense que l'écriture de mots de Shell est l'un de vos problèmes ici, mais vous devriez toujours citer votre regex, car toutes sortes de choses vont mal se passer autrement.
$ grep ' \.pdf' example
grep .pdf
Ou s'il peut y avoir plusieurs espaces (nous ne pouvons pas utiliser *
car cela correspond aux cas où il n'y a pas d'espaces précédents)
grep ' \+\.pdf' example
+
signifie "un ou plusieurs caractères précédents". Dans BRE, vous devez y échapper avec \
pour obtenir cette fonction spéciale, mais vous pouvez utiliser ERE pour éviter cela.
grep -E ' +\.pdf' example
Vous pouvez également utiliser \s
dans grep
pour désigner un espace.
grep '\s\+\.pdf' example
Nous devrions échapper au littéral .
car dans regex .
désigne n'importe quel caractère, à moins qu'il ne s'agisse d'une classe de caractères.