【问题标题】:Grep expression with special file names具有特殊文件名的 Grep 表达式
【发布时间】: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。我必须查看文件的内部内容并在其内容中搜索当前文件的名称。

标签: unix csh tcsh


【解决方案1】:

您是否尝试过使用 grep -F,它假定输入是字符串文字并且不担心转义字符。

【讨论】:

    猜你喜欢
    • 2021-11-09
    • 2022-10-22
    • 1970-01-01
    • 2021-12-05
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    相关资源
    最近更新 更多