Je voulais lister le contenu d'un pwd et afficher uniquement le fichier commençant par un point. J'ai essayé ls -a | grep ^\.
mais je ne peux pas comprendre pourquoi la sortie contient également les fichiers qui ne commencent pas par un point. Par exemple:
Pictures
.pip
.pki
.profile
projects
Public
Je sais que je peux réaliser ce que je veux avec ls -ld .*
je suis juste curieux de ce comportement de grep que je ne peux pas expliquer.
grep
regular-expression
ps-aux
la source
la source
ls -d .*
lister tous les fichiers commençant par.
?Réponses:
Citez l'argument pour
grep
, ainsils -a | grep '^\.'
La raison en est que le shell le gère
\.
et le transforme en clair.
, qui estgrep
ensuite traité comme un caractère générique à un seul caractère. En cas de doute, citez toujours une chaîne qui contient (ou peut contenir) un caractère spécial pour le shell.la source
grep ^\\.
, \\ est traité par le shell comme une simple barre oblique inverse et, à nouveau, le grep traite la barre oblique inverse unique suivie du point comme point littéral.Vous devez mettre l'expression rationnelle grep entre guillemets.
Remarque: N'analysez pas la sortie de la
ls
commande .la source
Si vous exécutez cmd ls -a | grep ^ \. alors grep ne considère pas "\" comme un caractère spécial et une signification de "." ne vous échappez pas.
Lorsque nous utilisons cmd ls -a | grep "^ \." alors grep considère "\" comme un caractère spécial et une signification de "." s'échappe. Cela vous donnera un résultat comme prévu.
Si vous souhaitez utiliser grep cmd sans guillemets, vous devez également échapper le caractère "\". Vous pouvez avoir un résultat attendu sans guillemets doubles en suivant la commande. ls -a | grep ^ \\.
Pour plus de détails sur la signification des caractères spéciaux dans Regex, reportez-vous au lien suivant. http://www.regular-expressions.info/quickstart.html
la source