, 당신의 정규식 작동에 대해
코드 조각이 일치합니다. 포함하는 입력 파일 file.md
감안할 때 :
{% highlight ruby %}
{% endhighlight %}
not this line, though
nor {%this%}
나는 당신의 명령 (UUoC을 피하는)를 실행, 나는 출력이 표시 얻을 :
$ egrep '{% +' file.md
{% highlight ruby %}
{% endhighlight %}
$
당신은 당신이 사용하는 egrep
의 버전을 확인하지했습니다 어떤 플랫폼을 사용하고 있는지 알려줍니다. 저는 Mac OS X 10.11.6을 실행 중이고 egrep (BSD grep) 2.5.1-FreeBSD
을 사용하고 있습니다 (그러나 GNU Grep 2.25에서도 같은 결과를 얻었습니다).
그래도 {
은 egrep
의 메타 문자이며 예상 한대로 초기 {
을 처리하지 못한다는 것을 알고 있어야합니다.
$ egrep '\{% {1,4}[a-z]{4,20} {1,4}%\}' file.md
{% endhighlight %}
$
내가 처음이자 마지막 중괄호를 피해 백 슬래시를 사용 :
예를 들어, 여기에만 endhighlight
라인을 선택해야 더 복잡한 egrep
호출합니다. {n,m}
표기법은 n ≤ x ≤ m의 앞의 정규식 (공백 및 [a-z]
)과 일치 함을 의미합니다. ,m
을 생략 할 수 있습니다. {4,}
도 사용할 수 있습니다 - 매뉴얼을 참조하여이를 이해하십시오. 하지만, 내 컴퓨터에, 나는 또한 실행할 수 있습니다 아마도
$ egrep '{% {1,4}[a-z]{4,20} {1,4}%}' file.md
{% endhighlight %}
$
를 첫 번째 {
가 {n,m}
순서를 시작하지 않기 때문에, 그것은 일반 문자로 처리됩니다.
당신이 Extended Regular Expressions의 POSIX 사양을 보면, 당신이 그런 {
사용 말한다 찾을 수는 정의되지 않은 동작입니다 :
*+?{
(가) <asterisk>
, <plus-sign>
, <question-mark>
및 <left-brace>
을하여야한다 꺽쇠 괄호 표현식 (RE 괄호 표현식 참조)에서 사용될 때를 제외하고는 특별해야합니다.이러한 문자는 ERE에 먼저 표시 또는 <left-brace>
가 유효한 구간의 일부가 아닌 경우 즉시 <vertical-line>
, <circumflex>
, 또는 <left-parenthesis>
을 다음과 같은 경우
그래서, POSIX에 따라, 해당 페이지 정규식을 사용하는 정의되지 않은 결과를 발생시킵니다. 따라서 POSIX가 받아 들일 만하다고 판단되는 결과를 얻고 있습니다. 이 경우
$ egrep '\{% +' file.md
{% highlight ruby %}
{% endhighlight %}
$
가'*'한정 기호로'+'한정 기호를 대체합니다
분명히, 다음을 사용하고 기대하는 결과를 얻을 수 있어야합니다. 문제가 무엇입니까? –
*가 작동하지만 공간도 확보 할 수 있습니다. 어떻게 공간을 확보 할 수 있습니까? 나는 그것이 + 할 것이지만, 작동하지 않는 것 같습니다. – duffney
'+'를 제거하고 작동하는지보십시오. 한정 기호는 1 개 이상 일치해야하므로 중복됩니다. 1이면''{% ''는 이미 충분합니다. 또한 공간이 아닌 탭이있을 수 있습니다. 리터럴 공간 대신'[[: blank :]]'를 시도하십시오. –