sintaxe grep para pesquisar strings com aspas simples?

0

Então, eu tenho um arquivo .js como abaixo e estou tentando pesquisar com o padrão grep abaixo. Não tenho certeza do erro que cometi, mas ele não fornece nenhuma saída, mesmo que o arquivo tenha esse padrão. Que erro estou fazendo e como corrigi-lo?

.js file:

var View = require('ampersand-view');
window.jQuery = require('jquery');
require('bootstrap');
require('bootstrap-tooltip');
var extend = require('lodash/assign');

minha exigência é encontrar quaisquer ocorrências de: require('query')

estou usando: grep 'require('jquery')' index.js

    
por Iamnoone 26.09.2016 / 22:43

4 respostas

2

As aspas simples não podem ser incorporadas em strings entre aspas simples. Experimente:

$ grep "require('jquery')" index.js
window.jQuery = require('jquery');

Como alternativa, você pode encerrar a cadeia entre aspas simples, adicionar uma aspas simples com escape e, em seguida, reiniciar a cadeia entre aspas simples:

$ grep 'require('\''jquery'\'')' index.js
window.jQuery = require('jquery');

Discussão

Para entender melhor o que está acontecendo, você pode usar instruções echo para ver como o shell processa as strings:

$ echo 'require('jquery')'
require(jquery)

No exemplo acima, existem duas strings com aspas simples: require( e ) . No que diz respeito ao shell, a string jquery não é citada.

$ echo "require('jquery')"
require('jquery')

Como o shell aceita aspas simples como parte de strings com aspas duplas, o acima funciona bem.

Às vezes, para evitar expansões de shell, é necessário que tudo esteja em uma string de aspas simples. Nesse caso:

$ echo 'require('\''jquery'\'')'
require('jquery')

Acima, há três strings com aspas simples: require( , jquery e ) . Entre essas strings estão aspas simples que são escapadas para que o shell as trate como caracteres normais.

Esta resposta assume que o shell é bash, dash, ash ou outro shell derivado de POSIX ou bourne. Para obter informações sobre outros reservatórios, consulte a resposta de Stéphane Chazelas .

    
por 26.09.2016 / 22:48
1

Aspas simples não podem ser aninhadas, use aspas duplas ao redor do padrão:

grep "require('jquery')" file.js

Quando você faz:

grep 'require('jquery')' file.js

O shell primeiro quebra o padrão em 3 partes, com base nas aspas simples. Primeiro literal 'require(' , depois jquery e, em seguida, literal ')' . Então, na verdade, o padrão é tomado como require(jquery) , o que não corresponde a nada esperado.

Exemplo:

$ cat foo.js 
var View = require('ampersand-view');
window.jQuery = require('jquery');
require('bootstrap');
require('bootstrap-tooltip');
var extend = require('lodash/assign');

$ grep "require('jquery')" foo.js
window.jQuery = require('jquery');
    
por 26.09.2016 / 22:48
1

Na maioria dos shells, o caractere ' é um operador de cotação e o caractere de espaço é usado para separar argumentos em um comando. Portanto, seu shell analisará esse comando como 3 argumentos para passar para o comando /bin/grep :

  1. grep
  2. require(jquery)
  3. index.js

Em 2 acima, o 'require('jquery')' foi considerado como citado require( concatenado com um não citado jquery concatenado com citado ) .

Você deseja que 2 seja require('jquery') . Como ' , como ( e ) é um caractere especial para o shell, é necessário citá-lo de alguma forma. A sintaxe depende do shell. Em shells semelhantes a Bourne, fish e (t)csh , você pode usar aspas duplas que eles reconhecem como outro operador de cotação:

 grep "require('jquery')"

Em rc -como shells ( rc , akanga , es ) onde '...' é a única forma de citar, a sintaxe é:

 grep 'require(''jquery'')'

Esse dobro- ' dentro de '...' é a maneira rc de escapar de ' .

Para detalhes sobre os caracteres especiais nos vários shells Unix e como citar / escape , veja Como usar um caractere especial como normal? .

    
por 26.09.2016 / 22:54
0

Coloque o padrão de pesquisa entre aspas duplas.

grep "require('jquery')" index.js
    
por 26.09.2016 / 22:49