작은따옴표로 문자열을 검색하기 위한 grep 구문은 무엇입니까?

작은따옴표로 문자열을 검색하기 위한 grep 구문은 무엇입니까?

그래서 아래와 같은 .js 파일이 있고 아래 grep 패턴으로 검색을 하려고 합니다. 내가 어떤 실수를 했는지는 잘 모르겠지만 파일에 해당 패턴이 있어도 출력이 제공되지 않습니다. 내가 무슨 실수를 하고 있고 어떻게 바로잡을 수 있나요?

.js파일:

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

내 요구 사항은 다음과 같은 항목을 찾는 것입니다.require('query')

내가 사용하고 있는 grep:grep 'require('jquery')' index.js

답변1

작은따옴표는 작은따옴표로 묶인 문자열에 포함될 수 없습니다. 노력하다:

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

또는 작은따옴표로 묶인 문자열을 끝내고 이스케이프된 작은따옴표를 추가한 다음 작은따옴표로 묶인 문자열을 다시 시작할 수 있습니다.

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

논의

무슨 일이 일어나고 있는지 더 잘 이해하려면 echo 문을 사용하여 쉘이 문자열을 처리하는 방법을 확인할 수 있습니다.

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

require(위의 예에는 작은따옴표로 묶인 두 개의 문자열( 및 ) 이 있습니다 ). 쉘에 관한 한 문자열은 jquery인용되지 않습니다.

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

쉘은 큰따옴표로 묶인 문자열의 일부로 작은따옴표를 허용하기 때문에 위의 작업은 제대로 작동합니다.

때로는 쉘 확장을 피하기 위해 모든 항목을 작은따옴표로 묶은 문자열로 묶어야 하는 경우도 있습니다. 이 경우:

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

위에는 작은따옴표로 묶인 문자열 3개가 있습니다: require(, jquery, 및 ). 해당 문자열 사이에는 쉘이 이를 일반 문자로 처리하도록 이스케이프된 작은따옴표가 있습니다.


이 답변에서는 쉘이 bash, dash, ash 또는 기타 POSIX 또는 bourne 파생 쉘이라고 가정합니다. 다른 쉘에 대한 자세한 내용은 다음을 참조하세요.스테판 차젤라스의 답변.

답변2

작은따옴표는 중첩될 수 없습니다. 패턴 주위에 큰따옴표를 사용하세요.

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

그렇게 할 때:

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

쉘은 먼저 작은따옴표를 기준으로 패턴을 세 부분으로 나눕니다. 먼저 Literal 'require(', jquery그 다음 literal 입니다 ')'. 따라서 실제로 패턴은 require(jquery)예상대로 일치하지 않는 것으로 간주됩니다.

예:

$ 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');

답변3

대부분의 쉘에서 '문자는 인용 연산자이고 공백 문자는 명령에 대한 인수를 구분하는 데 사용됩니다. 따라서 쉘은 해당 명령을 명령에 전달할 3개의 인수로 구문 분석합니다 /bin/grep.

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

위에서 2'require('jquery')'인용됨 require(다음과 연결됨인용되지 않은 jquery와 연결됨인용됨 ).

당신은 2되고 싶어합니다 require('jquery'). ', like ()는 셸의 특수 문자이므로 어떤 방식으로든 인용해야 합니다 . 구문은 셸에 따라 다릅니다. Bourne과 유사한 쉘 fish및 에서는 (t)csh또 다른 인용 연산자로 인식되는 큰따옴표를 사용할 수 있습니다.

 grep "require('jquery')"

가 유일한 인용 형식인 rc유사 쉘( rc, akanga, es) 에서 구문은 다음과 같습니다.'...'

 grep 'require(''jquery'')'

이중 '내면이 '...'바로 그 rc길 이다탈출하다여기 '에.

다양한 Unix 셸의 특수 문자 및 사용 방법에 대한 자세한 내용인용하다/탈출하다저것들, 봐특수 문자를 일반 문자로 사용하는 방법은 무엇입니까?.

답변4

검색 패턴을 큰따옴표로 묶습니다.

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

관련 정보