我必须浏览目录中的一些常规文件并找到这些文件,这些文件的内容中有自己的名称。
在下面的脚本片段中,我将遍历路径并使用 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
,不再需要启用扩展正则表达式的开关。