问题描述
在执行我的脚本时,我使用了 2 个输入参数,一个用于文件夹,另一个用于字符串匹配。这是我的代码。
if [ $# -ne 2 ]
then
echo "Incorrect use. Try: Sudo $0 FILE PATTERN"
exit 2
fi
找出匹配的位置以及匹配出现的次数。
echo ""
echo "Your pattern ${2} occurs in the following files:"
grep -r -i -l -c $2 $1
echo ""
echo "Pattern match ${2} found this many times:"
grep -r -o -i $2 $1 | wc -l
echo ""
echo "Here are the files from the specified parameter search:"
ls -l | awk '{print $9 "\t" $5}'
grep $2 $1 -r -c | cut -d: -f1 | uniq -d
我似乎无法找到仅出现 2 次的文件存储在数组中,感谢所有帮助!!
解决方法
关于代码片段的一些想法 -
-
引用变量用法.. 例如(想象一下,如果 $2 是 Fat Cat,它会在不引用的情况下中断,或者路径 /home/User/Path Has Spaces In It/File。 txt )
grep -r -i -l -c $2 $1
应该
grep -r -i -l -c "$2" "$1"
-
使用 -c 选项 grep 来计算匹配项。
-c,--count Only a count of selected lines is written to standard output.
是的,它类似于
wc -l
,但 wc 将空格放在任何地方,而 grep 输出可以直接放入变量中(如果只处理 1 个文件 - 或管道输入)。 -
如果您正在尝试搜索目录,请明确说明您在做什么(您的用法涉及文件...)
-
给出有意义的用户输出——假设 awk 给出了文件名和大小——但是脚本的用户是怎么知道的?
-
您正在寻找的输入/预期输出是什么(最后一行问题不清楚)。