Usando grep para pesquisar textos com aspas simples?


14

Estou usando o editor de texto gedit com terminal incorporado no ubuntu 12.04. Estou tentando procurar algum texto usando grep. Eu quero procurar por esta linha de código

'type' => 'select'

Eu tentei:

grep -r '\'type\' => \'select\''

Mas grepnão retornou nenhum resultado.

Então, alguém pode me dizer como procurar o código acima?

Respostas:


17

Coloque sua sequência de pesquisa entre aspas duplas:

grep "'type' => 'select'"

7

Você não pode escapar de aspas simples que aparecem em aspas simples. Conforme explicado no [manual do bash] :( http://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes ):

Os caracteres entre aspas simples ('' ') preservam o valor literal de cada caractere entre aspas. Uma aspas simples pode não ocorrer entre aspas simples, mesmo quando precedida por uma barra invertida .

Então, você precisa usar abordagens diferentes:

  1. Use aspas duplas:

    grep  "'type' => 'select'" file 
    
  2. Se você preferir soluções desnecessariamente complexas:

    grep  "'"type"'"\ =\>\ "'"select"'" file 
    
  3. Você sempre pode procurar qualquer caractere único em vez de especificar aspas simples:

    grep  '.type. => .select.' file 
    

Mas basta usar ", isso torna as coisas muito mais diretas.


E se a string que estou procurando estiver em um arquivo php e contiver variáveis? Estou realmente lutando com este.
Aubrey Robertson

@AubreyRobertson eu precisaria de um exemplo para responder corretamente. Se você quiser encontrar algo parecido com a string $var, você pode fazer grep '$var' file.phpaspas simples. Para mais detalhes, poste uma nova pergunta e deixe um comentário aqui. Eu ficaria feliz em ajudar.
terdon 31/08/16

Eu descobri. Não foram os cifrões que atrapalharam meu grep, eram as referências de matriz (colchetes) porque o grep os usa para regex. Esta é a linha que eu estava tentando grep: $output = $info['function']($variables); eu só tinha que escapar deles adequadamente com barra invertida dupla. Este é o meu comando grep depois de tudo dito e feito:targetstring="\$output = \$info\\['function'\\](\$variables);" targetlinenumber=`grep -n "$targetfile" -e "$targetstring" | cut -d :f 1`
Aubrey Robertson

1

cd para o diretório que contém o arquivo .txt

cd /path 

Então :

você pode usar grep "'type' => 'select'" name.txt

ou:

`grep "'type' => 'select'" /path/file.txt

Resultado :

insira a descrição da imagem aqui


3
A questão diz respeito apenas às aspas simples, não à estrutura de diretórios ou a qualquer grepoutra funcionalidade (um pouco irrelevante).
22414 Chris

@ Chris, de fato, com a -ropção (como OP escreve), o nome do arquivo não é necessário.
Brady Trainor
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.