주어진 정규 표현식과 가장 잘 일치하는 파일을 여는 방법은 무엇입니까?

주어진 정규 표현식과 가장 잘 일치하는 파일을 여는 방법은 무엇입니까?

~/mydir여러 개의 텍스트 파일이 포함된 디렉터리가 있다고 가정해 보겠습니다 . 이 디렉토리에서 검색 searchterm하여 가장 일치하는 파일이 무엇인지 확인 하고 싶습니다 . 단 하나의 명령을 사용하여 이 작업을 어떻게 수행할 수 있습니까?

답변1

이는 스크립트에 다음 줄을 추가하여 수행됩니다.

grep -c "$1" ~/mydir/* | grep -v ':0' | sort -t: -k2 -r -n | head -1 | sed 's/:.*//' | xargs less

그럼 그냥 전화해./myscript searchterm

재귀적으로 검색하려면 첫 번째 명령에서 로 변경하세요 -c.-crgrep

이 파이프라인의 다양한 부분(순서대로):

grep -c "$1" ~/mydir/*    # Outputs a list of the files in ~/mydir/ with :<count>
                          # appended to each, where <count> is the number of
                          # matches of the $1 pattern in the file.

grep -v ':0'              # Removes the files that have 0 results from
                          # the list.

sort -t: -k2 -r -n        # Sorts the list in reverse numerical order
                          # (highest numbers first) based on the
                          # second ':'-delimited field

head -1                   # Extracts only the first result
                          # (the most matches)

sed 's/:.*//'             # Removes the trailing ':<count>' as we're
                          # done with it

xargs less                # Passes the resulting filename as
                          # an argument to less

일치하는 항목이 전혀 없으면 Less가 비어 있게 열립니다.

답변2

충분한

grep -c 'pattern' ~/mydir/* 2>/dev/null| sort -rk2n -t:| sed 's/:.*//;q'

관련 정보