grep: 주어진 위치에서 일치하는 줄을 시작합니다(처음 n 문자 건너뛰기)

grep: 주어진 위치에서 일치하는 줄을 시작합니다(처음 n 문자 건너뛰기)

다음 형식 줄이 포함된 파일이 있습니다.

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자 이상이 일치하며 22경우에는 큰 차이가 없지만 검색되는 패턴이 더 복잡한 경우 이 최적화가 매우 도움이 될 수 있습니다.

관련 정보