【发布时间】:2012-03-14 06:25:01
【问题描述】:
我想创建这样使用 find 的脚本:
find . -regex $1 | while read prom; do
echo $prom
done
我想从选项中获取正则表达式,但我无法使其正常工作。我尝试直接使用一些正则表达式(例如 ".*(txt)§" )而不是 $1 但它没有帮助。使用 find 我忘记了什么?
【问题讨论】:
我想创建这样使用 find 的脚本:
find . -regex $1 | while read prom; do
echo $prom
done
我想从选项中获取正则表达式,但我无法使其正常工作。我尝试直接使用一些正则表达式(例如 ".*(txt)§" )而不是 $1 但它没有帮助。使用 find 我忘记了什么?
【问题讨论】:
你有括号有什么原因吗?尝试.*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\)$,但我不知道在文本中我必须使用 \\ (并且该符号存在应对问题)。你的回答帮助我引用。谢谢