~/mydir
여러 개의 텍스트 파일이 포함된 디렉터리가 있다고 가정해 보겠습니다 . 이 디렉토리에서 검색 searchterm
하여 가장 일치하는 파일이 무엇인지 확인 하고 싶습니다 . 단 하나의 명령을 사용하여 이 작업을 어떻게 수행할 수 있습니까?
답변1
이는 스크립트에 다음 줄을 추가하여 수행됩니다.
grep -c "$1" ~/mydir/* | grep -v ':0' | sort -t: -k2 -r -n | head -1 | sed 's/:.*//' | xargs less
그럼 그냥 전화해./myscript searchterm
재귀적으로 검색하려면 첫 번째 명령에서 로 변경하세요 -c
.-cr
grep
이 파이프라인의 다양한 부분(순서대로):
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'