![fzf를 사용하여 파일의 모든 줄을 검색하는 방법(개행 무시)은 무엇입니까?](https://linux55.com/image/170061/fzf%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EB%AA%A8%EB%93%A0%20%EC%A4%84%EC%9D%84%20%EA%B2%80%EC%83%89%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95(%EA%B0%9C%ED%96%89%20%EB%AC%B4%EC%8B%9C)%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
이것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 명령을 하나로 결합할 수 있다고 생각했지만 그렇게 하기에는 너무 어리석습니다.