Comportamento estranho de “ls -a | grep ^ \.

10

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 iniciam com ponto. Por exemplo:

Pictures
.pip
.pki
.profile
projects
Public

Eu sei que posso conseguir o que quero com ls -ld .* Estou apenas curioso sobre esse comportamento do grep que não consigo explicar.

    
por Arkonix 05.04.2015 / 13:16

3 respostas

20

Cite o argumento para grep , assim ls -a | grep '^\.'

A razão para isso é que o shell manipula \. e o transforma de volta em . simples, que grep então trata como um curinga de caractere único. Em caso de dúvida, sempre cite uma string que contenha (ou possa conter) um caractere especial para o shell.

    
por 05.04.2015 / 13:20
11

Você precisa colocar o regex do grep dentro das aspas.

ls -a | grep '^\.'

Nota: Não analise a saída do comando ls .

    
por 05.04.2015 / 13:19
0

Se você executar cmd ls -a | grep ^ \. então grep não considera "\" como caractere especial e significado de "." não escapem.

Quando usamos cmd ls -a | grep "^ \." grep considera "\" como um caractere especial e significado de "." fica escapado. Isso lhe dará um resultado como esperado.

Se você quiser usar o grep cmd sem aspas, você também deve escapar do caractere "\". Você pode ter resultado esperado sem aspas duplas seguindo o comando. ls -a | grep ^ \\.

Para mais detalhes sobre o significado de caracteres especiais no Regex, consulte o link a seguir. link

    
por 07.04.2015 / 08:12