Eu queria listar o conteúdo de um pwd e exibir apenas o arquivo começando com ponto. Eu tentei, ls -a | grep ^\.
mas não consigo descobrir por que a saída contém também os arquivos que não começam com ponto. Por exemplo:
Pictures
.pip
.pki
.profile
projects
Public
Sei que posso conseguir o que quero, ls -ld .*
apenas estou curioso sobre esse comportamento do grep que não consigo explicar.
grep
regular-expression
ps-aux
fonte
fonte
ls -d .*
listar todos os arquivos começando.
?Respostas:
Cite o argumento para
grep
, assimls -a | grep '^\.'
A razão para isso é que o shell manipula
\.
e o transforma novamente em simples.
, quegrep
então trata como um curinga de um caractere. Em caso de dúvida, sempre cite uma sequência que contenha (ou possa conter) um caractere especial para o shell.fonte
grep ^\\.
, \\ é tratado pelo shell como uma barra invertida única e novamente o grep trata a barra invertida única seguida pelo ponto como ponto literal.Você precisa colocar o grep regex entre aspas.
Nota: Não analise a saída do
ls
comando .fonte
Se você executar o cmd ls -a | grep ^ \. então grep não considera "\" como um caractere e significado especial de "." não se escape.
Quando usamos cmd ls -a | grep "^ \." então grep considera "\" como um caractere especial e significado de "." é escapado. Isso lhe dará um resultado conforme o esperado.
Se você deseja usar o grep cmd sem aspas, você deve também "" escapar do caractere. Você pode obter o resultado esperado sem aspas duplas seguindo o comando ls -a grep ^ \\.
Para detalhes sobre o significado de caracteres especiais no Regex, consulte o link a seguir. http://www.regular-expressions.info/quickstart.html
fonte