여러 줄 검색을 더 적게 수행하는 방법은 무엇입니까?

여러 줄 검색을 더 적게 수행하는 방법은 무엇입니까?

에서는 캐리지 리턴과 줄 바꿈이 포함된 패턴을 less사용하여 검색할 수 있습니까 ? /나는 당신의 패턴이 다음을 사용하는 줄로 끝날 수 있다는 것을 알고 있습니다 $.Less 검색에 개행 문자를 어떻게 포함하나요?), 하지만 여러 줄에 걸쳐 있는 텍스트를 일치시키려면 패턴이 필요합니다.

를 시도했지만 \n해당 n문자만 검색합니다.

답변1

less의 검색 기능은 한 번에 하나의 개행 구분 라인에서 작동하기 때문에 라인 경계를 넘어 일치하는 것은 불가능합니다 . 이는 시스템 정규식 구현(GNU, POSIX, PCRE 등)에 관계없이 적용됩니다.

메인라인 개발을 위한 공식 소스 저장소를 찾을 수 없다는 점에 유의하십시오. less, 그러나 여기서 코드 검토를 위해 다음 링크는 FreeBSD contrib 트리에서 가져온 것입니다.

보다search.c:검색_범위()검색 작업의 구현을 위해. 그 안의 루프는 다음을 호출합니다.line.c:forw_raw_line()개행으로 구분된 다음 콘텐츠 블록을 검색합니다. 해당 블록은 다음으로 전달됩니다.match.c:match_pattern()검색 패턴(정규식)이 실행되는 곳입니다.

여러 줄에 걸쳐 일치시키려면 다른 도구를 사용해야 합니다. 한 가지 옵션은 편집기를 열고 다른 사람이 제안한 대로 검색 기능을 사용하는 것입니다. v를 눌러 편집기를 호출할 수 있습니다 less.

답변2

에서 이를 수행하는 방법을 잘 모르지만 less에서 동일한 작업을 수행할 수 있습니다 vim.

http://vim.wikia.com/wiki/Search_across_multiple_lines

/PATTERN1\\_.\\{-}PATTERN2

원자는 \\_.줄 끝을 포함한 모든 문자를 찾습니다. 다중은 \\{-}가능한 한 적은 수와 일치합니다.

답변3

less은 정규식 구문을 사용하고 ed있으며 불행히도 여러 줄 일치를 지원하지 않습니다.

https://www.gnu.org/software/gnulib/manual/html_node/ed-regular-expression-syntax.html#ed-regular-expression-syntax

나는 그것을 찾거나 적어도 이 구문 비트가 다음에서 사용되었는지 알아보기를 바랐습니다 less.

RE_DOT_NEWLINE 이 비트가 설정되면 모든 문자 일치 연산자는 개행과 일치합니다. 이 비트가 설정되어 있지 않으면 설정되지 않습니다.

따라서 .+패턴을 사용하여 개행 문자를 일치시킬 수 있습니다. 하지만 그렇지 않습니다.

관련 정보