【问题标题】:Find with regex parametr from variable使用变量中的正则表达式参数查找
【发布时间】:2012-03-14 06:25:01
【问题描述】:

我想创建这样使用 find 的脚本:

find . -regex $1 | while read prom; do
    echo $prom
done

我想从选项中获取正则表达式,但我无法使其正常工作。我尝试直接使用一些正则表达式(例如 ".*(txt)§" )而不是 $1 但它没有帮助。使用 find 我忘记了什么?

【问题讨论】:

    标签: regex bash find


    【解决方案1】:

    你有括号有什么原因吗?尝试.*txt$ 作为您的正则表达式(不是您问题中那个有趣的“部分符号”符号)。

    如果你确实想要括号(作为捕获括号?)你必须做.*\(txt\)$,因为find 的默认正则表达式类型是Emacs 样式,其中()文字 并且必须被转义才能在它们的正则表达式意义上进行解释。

    您也可以使用find . -regextype posix-extended -regex '.*(txt)$',注意-regextype posix-extended 将正则表达式更改为扩展的POSIX 正则表达式,其中() 特殊字符(find -regextype asdf 通常会给您一条错误消息列出您可以为regextype 提供的所有选项。

    另外,在您的 bash 脚本中,您应该将 $1 括在引号中:

    find . -regex "$1"
    

    (除非 $1 已经用引号括起来,在这种情况下忽略建议)。

    【讨论】:

    • 我的示例应该看起来像.*\(txt\)$,但我不知道在文本中我必须使用 \\ (并且该符号存在应对问题)。你的回答帮助我引用。谢谢
    • "(除非 $1 已经用引号括起来,在这种情况下忽略建议)" - 不,它在传递给脚本/函数时如何引用并不重要:当您“取消引用”变量时使用引号。
    猜你喜欢
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 2019-01-17
    相关资源
    最近更新 更多