grep menos número não funciona

0

Eu quero encontrar todos os arquivos em um diretório que contenha -2 .

Usando ls | grep "-2" retorna usage: grep...

O uso de aspas simples, em vez de aspas duplas, retorna o mesmo e também não usa aspas, enquanto a pesquisa de qualquer outra coisa retorna corretamente nomes de arquivos correspondentes.

Se bem me lembro, - não é um caractere especial de regex.

Por favor, não se concentre no problema específico de encontrar arquivos com um nome. Eu quero principalmente entender porque o grep está se comportando dessa maneira.

Usando o bash no macOS 10.13

    
por Teejay 18.08.2018 / 14:06

1 resposta

1

It is like if it is interpreting -2 as a command line parameter, regardless the fact it is wrapped by quotes.

grep não sabe se um parâmetro é agrupado por aspas ou não.

Muitas etapas de análise são executadas pelo próprio shell 1 antes de executar qualquer coisa - > redirecionamentos são aplicados, $ variáveis são expandidas, * caracteres curinga são expandidos, | pipelines divididos em um conjunto de comandos individuais e cada comando dividido em uma matriz de palavras.

Então, se você executar grep -2 , grep '-2' , grep \-2 ou mesmo x=-2; grep $x , o shell ainda a verá como a mesma lista de parâmetros: { grep , -2 }. Isso é o que será passado para a chamada do sistema execv (), e é o que o programa grep receberá em sua matriz argv[] , independentemente da citação original.

1 Mesmo no Windows, onde a linha de comando em CreateProcess () é apenas uma única string, a maioria das portas do grep ainda terá esse comportamento porque a biblioteca de tempo de execução C executa a mesma divisão de argumentos durante a inicialização.

    
por 18.08.2018 / 15:03

Tags