脚本LinuxBash,根据行中的字数打印grep输出

脚本LinuxBash,根据行中的字数打印grep输出,linux,bash,shell,Linux,Bash,Shell,我正试图为bashshell编写一个scirpt。我得到了4个参数: 目录路径 文件扩展名 一句话 数 我必须查找路径的所有文件和子目录的文件,以及具有给定扩展名的文件。然后,在文件中查找与给定单词匹配的行,但前提是行中的单词数大于或等于提供的数字。 例如: 如果localDirectory具有:image.png script.sh text.txt 并且text.txt具有: This is a text file It contains many words This is an exam

我正试图为bashshell编写一个scirpt。我得到了4个参数:

  • 目录路径
  • 文件扩展名
  • 一句话
  • 我必须查找路径的所有文件和子目录的文件,以及具有给定扩展名的文件。然后,在文件中查找与给定单词匹配的行,但前提是行中的单词数大于或等于提供的数字。
    例如:
    如果
    localDirectory
    具有:
    image.png script.sh text.txt

    并且
    text.txt
    具有:

    This is a text file
    It contains many words
    This is an example for a simple text file
    
    然后给出命令:
    /example.sh localDirectory txt text 7

    我应该输出:
    这是一个简单文本文件的示例

    目前,我的脚本如下所示:

    if [ "$#" -ne 4 ];
    then
      echo "Not enough parameters"
      exit 1
    fi
    find $1 -name "*.$2" -exec grep -wi $3  {} \;
    
    对于前3个目标来说,它工作得很好,我只是不知道现在如何过滤结果,使行的字数大于或等于4美元

    当然,我可以创建一个新文件并在那里输出,然后从中读取并只打印相关行,但我宁愿这样做而不创建新文件

    我对shell脚本非常陌生


    有什么想法吗?

    使用
    awk
    ,这样您就可以测试
    NF
    (行中的字段数)

    还记得引用所有变量

    find "$1" -name "*.$2" -exec awk -v word="${3,,}" -v count="$4" 'NF >= count && tolower($0) ~ word' {} +
    

    ${3,,}
    $3
    转换为小写,
    tolower($0)
    将文件行转换为小写,因此比较它们使其不区分大小写。

    谢谢!grep中添加的
    wi
    标志如何?我知道这是个敏感的案子你在用GNU awk吗?这样更容易解决。请参阅
    awk
    中的各种匹配整词的方法。