Bash 使用命令行在文件中搜索关键字列表?
我在txt文件中有一个关键字列表,如下所示:Bash 使用命令行在文件中搜索关键字列表?,bash,perl,command-line,ssh,command,Bash,Perl,Command Line,Ssh,Command,我在txt文件中有一个关键字列表,如下所示: keyword1 keyword2 keyword3 我需要搜索我的所有文件-除了HTML和CSS文件-这些关键字 我唯一需要知道的是哪个关键字没有出现在任何文件中。我不在乎做什么或他们在什么文件。我只需要知道哪些关键字不在任何文件中 我查找的所有内容都会返回关于如何查找关键字和输出它们所在文件的结果。我愿意通过命令行、Perl或任何最简单的方法来实现这一点 看起来这些命令可以用于查找不包含“我的关键字”的文件: grep -L "foo" *
keyword1
keyword2
keyword3
我需要搜索我的所有文件-除了HTML和CSS文件-这些关键字
我唯一需要知道的是哪个关键字没有出现在任何文件中。我不在乎做什么或他们在什么文件。我只需要知道哪些关键字不在任何文件中
我查找的所有内容都会返回关于如何查找关键字和输出它们所在文件的结果。我愿意通过命令行、Perl或任何最简单的方法来实现这一点
看起来这些命令可以用于查找不包含“我的关键字”的文件:
grep -L "foo" *
或
但是我不知道如何从我的txt文件中提取关键字,或者如何让它搜索除.html或.css之外的所有文件
我在我的服务器上运行此程序,因此我并不太关心它的资源密集程度…由于您的描述不完整,我将假设如下:
#!/bin/bash
TMP=/tmp/filelist$$.txt
find . -type f | grep -v ".html$" | grep -v ".css$" > $TMP
## Note: if you are search only current fold but not subfolders,
## add "-maxdepth 1" option to "find" command
while read keyword; do
if [ `while read file; do \
cat "$file"; \
done < $TMP | grep -c "$keyword"` -eq 0 ]; then \
echo "$keyword does not appear in any files."; \
fi; \
done < ../keywordfile.txt
#/bin/bash
TMP=/TMP/filelist$$.txt
找到-键入f | grep-v.html$“| grep-v.css$”>$TMP
##注意:如果只搜索当前文件夹而不搜索子文件夹,
##将“-maxdepth 1”选项添加到“find”命令
同时读取关键字;做
if[`在读取文件时;do\
cat“$file”\
完成<$TMP| grep-c“$keyword”`-eq 0];然后\
echo“$关键字不会出现在任何文件中。”\
fi\
完成<../keywordfile.txt
试试这个:
#!/bin/bash
keywordlist=$(cat keywordfile.txt | tr "\n" "\|")
for x in $(find . ! -name "*.html" ! -name "*.css" -type f)
do
if ! grep -qE "(${keywordlist%"|"})" $x
then
echo $x
fi
done
刚刚用代码更新。注意:您必须将此脚本放在要搜索的文件夹之外的其他文件夹中,否则,此脚本也会被搜索您的关键字!下面是我得到的错误:
:command not found:command not found search.sh:line 14:unexpected token附近的语法错误
done'search.sh:line 14:done
看起来您的bash很旧,不支持某些多行语法。因此,我添加了一些代码>'和\
'限制:带有尾随空格的文件名不起作用。带前导空格或中间空格的文件名应为OK。
#!/bin/bash
keywordlist=$(cat keywordfile.txt | tr "\n" "\|")
for x in $(find . ! -name "*.html" ! -name "*.css" -type f)
do
if ! grep -qE "(${keywordlist%"|"})" $x
then
echo $x
fi
done