다음 형식 줄이 포함된 파일이 있습니다.
2021-Jan-26 05:35 foo bar 2
2021-Jan-26 05:37 asdf 2 foo bar
2021-Jan-26 05:37 foo
내가 관심 있는 패턴은 위치 20에서 시작됩니다. 따라서 특정 패턴에 대한 파일을 찾을 때 처음 19자를 건너뛰고 싶습니다(일치하지 않음).
그래서 처음 19자를 제외하고 줄의 어느 곳에서나 패턴을 일치시키고 싶습니다.
위의 예에서 를 grep하면 2
라인 1과 라인 2만 일치시키려고 합니다.
어떻게 해야 합니까 grep
?
답변1
grep
처음 19자를 무시하고 필요한 패턴만 일치시키는 GNU 옵션을 사용하십시오 .
grep -P "(?<=.{19})2" file
산출:
2021년 1월 26일 05:35 푸바2 2021년 1월 26일 05:37 asdf2풍부한 바
답변2
실제로 처음 19개를 일치시키고 싶지만 "아무거나"와 일치시킵니다.
그래서
grep '^....................*2'
20 점이 있습니다. ^
행의 시작 부분에 패턴을 고정합니다 . 다음 19개의 점은 각각 한 문자와 일치하므로 효과적으로 건너뜁니다. 그런 다음 .*
0개 이상의 문자를 일치시키고 2
원하는 패턴을 일치시킵니다.
다음을 통해 효율성을 향상할 수 있습니다.
grep '^..................[^2]*2'
줄의 시작 부분과 일치하고 19자 이상이 일치하며 2
이 2
경우에는 큰 차이가 없지만 검색되는 패턴이 더 복잡한 경우 이 최적화가 매우 도움이 될 수 있습니다.