【问题标题】:Trying to find 2 or more occurences in string patterns试图在字符串模式中找到 2 次或更多次出现
【发布时间】:2021-03-18 16:19:39
【问题描述】:

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

【问题讨论】:

  • 请修正您问题的格式。
  • 你真的需要使用sudo吗?

标签: bash shell scripting


【解决方案1】:

对sn-ps代码的一些思考-

  1. 引用变量用法 .. 例如(想象一下,如果 $2 是 Fat Cat 它会在不引用的情况下中断,或者路径 /home/User/Path Has Spaces In It/File.txt em>)

    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. 您要查找的输入/预期输出是什么(最后一行问题不清楚)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 2011-04-21
    相关资源
    最近更新 更多