微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

试图在字符串模式中找到 2 个或更多出现

如何解决试图在字符串模式中找到 2 个或更多出现

在执行我的脚本时,我使用了 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 次的文件存储在数组中,感谢所有帮助!!

解决方法

关于代码片段的一些想法 -

  1. 引用变量用法.. 例如(想象一下,如果 $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"
    
  2. 使用 -c 选项 grep 来计算匹配项。

    -c,--count
           Only a count of selected lines is written to standard output.
    

    是的,它类似于 wc -l,但 wc 将空格放在任何地方,而 grep 输出可以直接放入变量中(如果只处理 1 个文件 - 或管道输入)。

  3. 如果您正在尝试搜索目录,请明确说明您在做什么(您的用法涉及文件...)

  4. 给出有意义的用户输出——假设 awk 给出了文件名和大小——但是脚本的用户是怎么知道的?

  5. 您正在寻找的输入/预期输出是什么(最后一行问题不清楚)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。