fzf를 사용하여 파일의 모든 줄을 검색하는 방법(개행 무시)은 무엇입니까?

fzf를 사용하여 파일의 모든 줄을 검색하는 방법(개행 무시)은 무엇입니까?

이것fzf 예제 위키 페이지fzf를 사용하여 디렉터리에 있는 모든 파일의 내용 내에서 퍼지 검색을 수행하는 방법을 설명합니다. 하지만 위키 페이지의 예에서는 다음과 같습니다.

ag --nobreak --nonumbers --noheading . | fzf

파일은 줄로 구분되며 각 줄은 개별적으로 처리됩니다.

예를 들어 파일은 다음과 같습니다.

hello
world

검색어 "hello world"는 검색어가 다른 줄에 있으므로 일치하지 않습니다.

줄 단위가 아닌 전체 파일을 검색하도록 fzf를 어떻게 사용합니까?

답변1

다소 더러운 해결책이 있습니다.

rg --heading --glob "*.txt" . some_directory_path | sed 's/^$/NEWLINEHEREYO/g' | tr '\n' ' ' | sed 's/NEWLINEHEREYO/\n/g' | fzf

설명하다:

당신이 할 때

rg . 

어딘가에서 특정 형식으로 터미널에 출력을 인쇄하고, 어딘가로 파이프하려고 하면 해당 형식이 손실됩니다. 이 작업을 효과적으로 수행하려면 포맷이 필요하다는 것을 알았습니다. 따라서 --heading 플래그는 형식을 유지합니다. --glob 및 디렉토리는 내 사용 사례에서 실행했기 때문에 추가했으며 명령이 깨질 경우를 대비하여 명령을 수정하고 싶지 않았습니다. 저는 컴퓨터에 능숙하지 않습니다.

그런 다음 sed를 사용하여 파일을 구분하는 모든 빈 줄을 NEWLINEHEREYO 태그로 바꿉니다. 그런 다음 tr을 사용하여 모든 줄 바꿈(빈 줄을 끊음)을 자르고 원하는 한 줄의 출력을 제공합니다. 그런 다음 다른 sed 명령을 사용하여 NEWLINEHEREYO를 개행 문자로 다시 변환하여 fzf가 문자 그대로 단일 행인 것처럼 검색하지 않도록 하여 개행 문자를 다시 도입합니다.

이것은 매우 비효율적이지만 내 사용 사례에는 잘 작동합니다. 나는 sed, tr 및 sed 명령을 하나로 결합할 수 있다고 생각했지만 그렇게 하기에는 너무 어리석습니다.

관련 정보