그래서 아래와 같은 .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
명령에 전달합니다.
grep
require(jquery)
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