
문서(doc, docx, odt 포함)에서 문자열을 검색하고 파일 이름 패턴에 따라 결과를 제한하는 명령줄 도구를 원합니다. 예를 들어 "피아노 문자 검색"을 사용하여 모든 파일에서 "피아노"라는 텍스트를 검색합니다. 이름에 "문자"가 포함되어 있습니다. 추적기 검색 명령은 좋지만 일치하는 모든 색인 파일에 대한 히트를 반환하므로 나무에 대한 나무를 볼 수 없습니다. 좀 더 집중적인 것이 필요하고 검색할 때마다 모호한 설정 파일을 수정하여 추적기를 재구성하고 싶지 않습니다. ASCII 텍스트를 검색하는 경우 "grep -r 패턴 디렉토리"를 사용하면 간단하지만 최신 단어 문서에서는 작동하지 않습니다.
답변1
이 주제에 대해 몇 가지 질문이 있지만(중복으로 표시되는 질문도 많음) 만족스러운 답변은 없습니다(적어도 나에게는). 그래서 추적기를 실행하고 주어진 패턴과 일치하는 파일 이름을 기반으로 결과를 필터링하기 위해 "검색"이라는 스크립트를 작성했습니다. "tracker search Piano -l 1000"을 사용하면 너무 많은 노이즈가 포함된 136개의 조회수가 표시됩니다. "피아노 문자 검색"을 사용하면 파일 이름(클릭 가능한 링크)과 관련 텍스트 줄을 보여주는 4개의 조회수가 표시됩니다. 이는 훌륭합니다.
#! /bin/bash
#
# Use "tracker" to search files for content matching a pattern.
# (tracker indexes files by content, including text in MS Word documents.)
# Optionally filter on file pathnames matching another pattern.
#
# Synopsis:
# search content-pattern [path-pattern]
Usage="Usage: ${0##*/} content-pattern [path-pattern]"
case $# in
(1)
IfPathPattern=false
;;
(2)
IfPathPattern=true
;;
(*)
echo "$Usage" >&2
exit 2
;;
esac
tracker search -l 1000 "$1" |
if $IfPathPattern
then
awk -v pattern="$2" '
BEGIN {pattern=tolower(pattern)}
{text=tolower($0)}
lines>0 {print; lines--}
text~pattern {print; lines=2}'
else
cat
fi