我试图找出在下面的脚本中为[每个]文件找到了哪些关键字。我尝试添加 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