【问题标题】:Search files for a list of keywords using command line?使用命令行在文件中搜索关键字列表?
【发布时间】:2015-01-01 06:41:02
【问题描述】:

我在 txt 文件中有一个关键字列表,如下所示:

keyword1
keyword2
keyword3

我需要在我的所有文件中搜索这些关键字,除了 HTML 和 CSS 文件。

我唯一需要知道的是哪个关键字不会出现在任何文件中。我不关心那些执行或它们在什么文件中。我只需要知道哪些关键字不在任何文件中。

我查找的所有内容都会返回有关如何查找关键字并输出它们所在文件的结果。我愿意通过命令行、Perl 或任何最简单的方法来完成它.

看起来这些命令应该适用于查找不包含我的关键字的文件:

grep -L "foo" *

ack -L "foo" *

但我不知道如何从我的 txt 文件中提取关键字或如何使其搜索除 .html 或 .css 之外的所有文件

我在我的服务器上运行它,所以我不太关心它的资源密集程度......

【问题讨论】:

  • 刚刚更新了代码。

标签: bash perl command-line ssh command


【解决方案1】:

由于您的描述不完整,我将假设以下内容:

  1. HTML 文件具有 .html 扩展名(注意:它可能具有 .htm .HTM、.HTML 扩展,我只是假设它们,请调整答案以适应 你的情况)
  2. CSS 文件具有 .css 扩展名(同样,它可能具有 .CSS 扩展名)
  3. 您的关键字可以很容易地放入 grep 命令中,即没有 特殊的正​​则表达式字符,例如“^”表示开始 行匹配,“$”表示行匹配结束。
  4. 您正在尝试搜索 a 文件夹下的文件及其 子文件夹。
  5. 假设您的关键字文件是 ../keywordfile.txt。注:由于当前 假设文件夹搜索,你的keywordfile.txt不能放在 当前文件夹,否则,搜索 keywordfile.txt 本身会产生 所有匹配,并且什么都不会输出(因为每个关键字都匹配)

现在是一种快速而肮脏的方法:

#!/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

【讨论】:

  • 注意:您必须将此脚本放在要搜索的文件夹之外的其他文件夹中,否则,此脚本也会搜索您的关键字!
  • 这是我得到的错误:: command not found : command not found search.sh: line 14: syntax error near unexpected token done' search.sh:第 14 行:done &lt; ../keywordfile.txt'
  • 您的 bash 似乎很旧并且不支持某些多行语法。因此我添加了一些;\
  • 限制:带有尾随空格的文件名将不起作用。带有前导空格或中间空格的文件名应该没问题。
【解决方案2】:

试试这个:

#!/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

【讨论】:

    猜你喜欢
    • 2015-01-11
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多