작은따옴표로 문자열을 검색하는 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 파생 쉘이라고 가정합니다. 다른 쉘에 대한 자세한 내용은 다음을 참조하세요.Stefan Chazeras의 답변.

답변2

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

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

이 작업을 수행할 때:

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

쉘은 먼저 작은따옴표를 기준으로 패턴을 세 부분으로 나눕니다. 먼저 단어 'require(', jquery그 다음 단어 ')'. 따라서 실제로 패턴은 으로 처리되며 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'). ', (및 등은 )셸의 특수 문자이므로 어떻게든 인용해야 합니다 . 구문은 셸에 따라 다릅니다. Bourne's와 같은 쉘 fish및 쉘에서는 (t)csh큰따옴표를 사용할 수 있으며, 이는 또 다른 인용 연산자로 인식됩니다.

 grep "require('jquery')"

유일한 참조 형식인 rc클래스 쉘( rc, akanga, es) 에서 구문은 다음과 같습니다.'...'

 grep 'require(''jquery'')'

이중 '내부 방법'...'rc탈출하다여기 '.

다양한 Unix 셸의 특수 문자 및 사용 방법에 대한 자세한 정보인용하다/탈출하다그들은 보았다일반 문자처럼 특수 문자를 사용하는 방법은 무엇입니까?.

답변4

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

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

관련 정보