grep: 특정 위치의 패턴 일치

grep: 특정 위치의 패턴 일치

grep위치 16에서 시작하는 경우 패턴을 일치시켜야 합니다 . 문자열 ' pattern'(공백으로 시작) 을 일치시키고 싶다고 가정해 보겠습니다 .

다음이 일치해야 합니다.

bla bla bla bla pattern

그리고 검색 패턴이 pos에서 시작되지 않기 때문에 다음은 일치하지 않아야 합니다. 16:

bla bla bla bla foo foo pattern

이 정규식을 사용해 보았습니다.

egrep '.*\{15\} pattern'

그러나 이것은 예상대로 작동하지 않는 것 같습니다.

누구든지 해결책을 제안할 수 있나요?

답변1

내 생각에 당신이 찾고 있는 것은 다음과 같습니다.

grep -E '^.{15} pattern'

이는 대부분의 사용 사례에 적합합니다. 하지만 해당 부분만 "일치"하는 것이 아니라 pattern그 이전의 모든 항목도 일치에 포함됩니다. 직접 제공되거나 쉘 별칭에 포함된 grep경우 강조 표시하여 이를 확인할 수 있습니다 . --color색상이 없으면 grep -o인쇄할 일치하는 부분에만 영향을 미칩니다. 예를 들어:

$ echo 'bla bla bla bla pattern' | grep -Eo '^.{15}( pattern)'
bla bla bla bla pattern

GNU grep에서 이 동작을 방지하려면 Lookbehind와 함께 Perl 표현식을 사용할 수 있습니다. 예를 들어:

$ echo 'bla bla bla bla pattern' | grep -Po '(?<=^.{15}) pattern'
 pattern

이는 해당 pattern부분에만 "일치"됩니다.

관련 정보