【发布时间】:2013-10-26 09:51:01
【问题描述】:
我是 csh/tcsh 脚本的真正初学者,这就是我需要你帮助的原因。问题是我必须浏览目录中的一些常规文件并找到那些在其内容中具有自己名称的文件。在下面的一段脚本中,我将遍历路径并使用 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
【问题讨论】:
-
我不清楚您的
grep是打算查看所有列出的文件,还是只查看文件名列表中的多个匹配项。如果您正在扫描名称列表,请将列表写入文件,这样您就不必担心转义当前位于 $path 变量中的元字符。grep -opts -- "targ" files也将帮助解决-r问题。 -
无论如何,我想你是说你可能有一个像
grep "'ano'" "$paths"这样的个人cmd。因此,您必须扫描分配给$name的每个值并转义任何 shell 或正则表达式元字符。不太可能任何人都可以在任何 shell 语言中完美地工作。所以建议你退后一步,看看其他选择。perl的设计考虑了这种疯狂,但要达到这个水平是一个很高的学习曲线。也许其他人会对此任务可能的python或其他语言发表评论。祝你好运。 -
我可以在这个项目中只使用 csh/tcsh。我必须查看文件的内部内容并在其内容中搜索当前文件的名称。