Qual dos seguintes usos de âncora está correto no regex usando grep?

1

Ambos os comandos abaixo fornecem a mesma saída, entretanto, qual é o método correto para usá-lo?

grep ^'\<that\>' file.txt

Procura a linha que tem isso como a primeira palavra

grep '^\<that\>' file.txt

Mesma saída que a anterior.

Qual é a diferença em colocar ^ âncora antes das aspas ou dentro das aspas? Qual é o mais adequado?

    
por frp farhan 12.04.2016 / 13:11

2 respostas

1

Não deve haver diferença entre os comandos. Ambos executam exatamente a mesma coisa:

$ set -x  ## turn on debugging info

$ /bin/grep ^'\<that\>' file.txt
+ /bin/grep '^\<that\>' file.txt

$ /bin/grep '^\<that\>' file.txt
+ /bin/grep '^\<that\>' file.txt

Como você pode ver acima, ambas as versões acabam executando exatamente a mesma coisa.

Dito isso, como regra geral, é sempre mais seguro manter toda a expressão regular dentro das aspas, então use:

/bin/grep '^\<that\>' file.txt

Enquanto neste caso não faz diferença, faz uma enorme diferença se sua expressão regular incluir um caractere significativo para o shell. Por exemplo:

grep ;'foo' file

Aqui, o shell interpretará o ; como um caractere de controle e executará dois comandos: grep (sem argumentos) e 'foo' file .

    
por 12.04.2016 / 15:01
1

Se você colocar o "^" fora das aspas, seu shell poderá interpretá-lo como um redirecionamento. Citando evita esse problema. Isso é considerado obsoleto, mas você pode encontrá-lo mencionado, por exemplo, no registro de alterações para peixes :

The caret ^ now only does a stderr redirection if it is the first character of a token, making git users happy #168

Leitura adicional:

You can use the caret, '^', as replacement for the pipe symbol, '|'. This origins from the main predecessor, the Thompson shell. (An exception is the Version 8 shell, which is not widely distributed, where this feature was removed while cleaning up the design.)

    
por 12.04.2016 / 13:21