
그래서 아래와 같은 .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
.
grep
require(jquery)
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