
Então, eu tenho um arquivo .js conforme abaixo e estou tentando pesquisar com o padrão grep abaixo. Não tenho certeza de qual erro cometi, mas ele não fornece nenhuma saída, mesmo que o arquivo tenha esse padrão. Que erro estou cometendo e como corrigi-lo?
.js
arquivo:
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')
grep que estou usando:grep 'require('jquery')' index.js
Responder1
Aspas simples não podem ser incorporadas em strings entre aspas simples. Tentar:
$ grep "require('jquery')" index.js
window.jQuery = require('jquery');
Como alternativa, você pode encerrar a string entre aspas simples, adicionar aspas simples com escape e reiniciar a string 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 strings:
$ echo 'require('jquery')'
require(jquery)
No exemplo acima, existem duas strings entre aspas simples: require(
e )
. No que diz respeito ao shell, a string jquery
não está entre aspas.
$ echo "require('jquery')"
require('jquery')
Como o shell aceita aspas simples como parte de strings entre aspas duplas, o procedimento acima funciona bem.
Às vezes, para evitar expansões de shell, é necessário que tudo esteja entre aspas simples. Nesse caso:
$ echo 'require('\''jquery'\'')'
require('jquery')
Acima, existem três strings entre 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 pressupõe que o shell seja bash, dash, ash ou outro shell POSIX ou derivado de bourne. Para obter informações sobre ainda outros shells, consulteA resposta de Stéphane Chazelas.
Responder2
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 depois literal ')'
. Então, na verdade, o padrão é considerado 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');
Responder3
Na maioria dos shells, o '
caractere é um operador de aspas e o caractere de espaço é usado para separar argumentos de um comando. Portanto, seu shell analisará esse comando como 3 argumentos para passar para o /bin/grep
comando:
grep
require(jquery)
index.js
Acima 2
, o 'require('jquery')'
foi tomado como umcitado require(
concatenado com umsem aspas jquery
concatenado com umcitado )
.
Você quer 2
ser require('jquery')
. Como '
, like (
e )
é um caractere especial para o shell, você precisa citá-lo de alguma forma. A sintaxe depende do shell. Em shells do tipo Bourne, fish
e (t)csh
, você pode usar aspas duplas, que eles reconhecem como outro operador de aspas:
grep "require('jquery')"
Em rc
shells semelhantes a -( rc
, akanga
, es
) onde '...'
é a única forma de aspas, a sintaxe é:
grep 'require(''jquery'')'
Esse duplo '
interior '...'
é o rc
caminho paraescaparaqui '
.
Para obter detalhes sobre os caracteres especiais nos vários shells do Unix e comocitar/escapareles, vejaComo usar um caractere especial como normal?.
Responder4
Coloque o padrão de pesquisa entre aspas duplas.
grep "require('jquery')" index.js