具有特殊文件名的 Grep 表达式

具有特殊文件名的 Grep 表达式

我必须浏览目录中的一些常规文件并找到这些文件,这些文件的内容中有自己的名称。

在下面的脚本片段中,我将遍历路径并使用 grep 在其内容中查找文件名。肯定正确的是 $something:q - 是我必须在其中查找文件的路径数组。下一个变量是 name,其中仅包含当前文件的名称。例如:/home/computer/text.txt(路径)和:text.txt(名称)

我最大的问题是在其内容中查找文件名。对于我来说,为此编写正确的 grep 非常困难,因为我正在通过的文件和目录的名称很疯狂。这里是其中的一些:

/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/!_1
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/dam/$user/:e/'/-r
/home/OS/pocitacove/testovaci_adresar/z/test3/skusime/ taketo/   taketo
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/.-bla/.-bla/.a=b
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/.-bla/.-bla/@
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/.-bla/.-bla/:
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/.-bla/.-bla/'ano'

foreach paths ($something:q)
    set name = "$paths:t"
    @ number = (`grep -Ec "$name" "$paths"`)

    if ($number != 0) then
        echo -n "$paths "
        echo $number
    endif

    @ number = 0
end

答案1

如果我理解正确,您的问题是您的文件名被解释为正则表达式元字符。在这种情况下,您需要-F切换到grep(由 POSIX 指定)。它告诉grep将其模式解释为固定字符串而不是正则表达式:

@ number = (`grep -Fc -- "$name" "$paths"`)

另请注意添加 来--指定“选项结束”以grep绕过以-.另请注意-E,不再需要启用扩展正则表达式的开关。

相关内容