Preciso procurar uma variável PHP $someVar
. No entanto, Grep acha que estou tentando executar uma regex e está reclamando:
$ grep -ir "Something Here" * | grep $someVar
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.
$ grep -ir "Something Here" * | grep "$someVar"
<<Here it returns all rows with "someVar", not only those with "$someVar">>
Não vejo uma opção para dizer ao grep para não interpretar a string como um regex, mas incluir o $
como apenas outro caractere da string.
grep
interpretar$
como um regex. É sobre a substituição do shell$someVar
pelo valor da variável de ambientesomeVar
, provavelmente a string vazia. O segundo exemplo não deve retornar todas as linhas com,someVar
mas todas as linhas, porque a string vazia está em todas as linhas. Para dizer ao shell para não substituir, você deve usar'$someVar'
ou\$someVar
. Então você terá que lidar com agrep
interpretação do$
personagem.Respostas:
Fuja do
$
colocando um\
na frente dele.fonte
Use
fgrep
(obsoleto),grep -F
ougrep --fixed-strings
, para fazer com que trate o padrão como uma lista de strings fixas, em vez de um regex.Para referência, a documentação menciona (trechos):
Para obter a referência completa, verifique: https://www.gnu.org/savannah-checkouts/gnu/grep/manual/grep.html
fonte
addslashes()
no bash. Esta é a maneira mais simples de fazer isso.$
, por exemplogrep -FR "unset(\$foo['bar'])"
grep -F
é uma maneira padrãogrep
de interpretar o argumento como uma string fixa, não um padrão.fonte
Você tem que dizer ao grep que usa uma string fixa, em vez de um padrão, usando '-F':
fonte
Nesta pergunta, o principal problema não é
grep
interpretar$
como um regex. É sobre a substituição do shell$someVar
pelo valor da variável de ambientesomeVar
, provavelmente a string vazia.Portanto, no primeiro exemplo, é como chamar
grep
sem nenhum argumento, e é por isso que fornece umausage
saída. O segundo exemplo não deve retornar todas as linhas contendo,someVar
mas todas as linhas, porque a string vazia está em todas as linhas.Para dizer ao shell para não substituir, você deve usar
'$someVar'
ou\$someVar
. Então você terá que lidar com a interpretação grep do$
caractere, daí agrep -F
opção dada em muitas outras respostas.Portanto, uma resposta válida seria:
fonte
+1 para a
-F
opção, será a resposta aceita. Além disso, tive um comportamento "estranho" ao pesquisar o-I..
padrão em meus arquivos, pois o-I
foi considerado uma opção degrep
; para evitar esse tipo de erro, podemos especificar explicitamente o fim dos argumentos do comando usando--
.Exemplo:
Espero que ajude alguém.
fonte
--
for usado, pode-HnrF
ser omitido?-F
evita interpretar o padrão como uma expressão regular, enquanto--
evita interpretar os elementos que o seguem como opções de grep.