脚本LinuxBash,根据行中的字数打印grep输出
我正试图为bashshell编写一个scirpt。我得到了4个参数:脚本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
例如:
如果
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
中的各种匹配整词的方法。