아래 스크립트에서 [각] 파일에 대해 어떤 키워드가 있는지 알아보려고 합니다. echo $keywords를 추가하려고 시도했는데 각 키워드만 출력되었습니다.
암호:
keywords=("Alachua" "ALACHUA" "alachua" "Archer" "Gainesville" "Hawthorne" "High Springs" "Newberry" "Waldo" "LaCrosse" "PA-LOCKA" "PALMETTO BAY" "PINECREST" "34997")
IFS=$'\n'
find . -size +1c -type f ! -exec grep -qwF "${keywords[*]}" {} \; -exec truncate -s 0 {} \;
고쳐 쓰다:
내 문제는 이 예제보다 더 많은 키워드가 있고 각 파일에 어떤 키워드가 있는지 확실하지 않다는 것입니다. 결과가 엉망이 될 수 있으므로 $keywords에서 제거해야 합니다.
답변1
몇 가지 질문이 있습니다:
당신은
"${keywords[*]}"
혼란스러워 합니다"${keywords[@]}"
. 전자는 다음으로 확장된다.하나토론.-q
모든 출력을 억제합니다.스키마가 여러 개인 경우 이를 매개변수 목록으로 전달할 수 없습니다. 당신이 필요로하는 것은
-e pattern1 -e pattern2
입니다. 아니면 파일로 전달해야 합니다(참고자료 참조-f
).
awk
이 경우에는 더 의미가 있다고 생각합니다 .
이는 유용할 수 있습니다.
awk -v patternfile=pattern \
'BEGINFILE {i=0; while(getline var <patternfile) {pattern[i]=var;i++}; '\
'no_patterns=i; close(patternfile)}; '\
'FNR == 1 {print ""; print "file: " FILENAME;}; '\
'{for (i in pattern) { if($0 ~ pattern[i]) {print pattern[i]; delete pattern[i]};}}' \
file file2