无法使用正则表达式

时间:2018-09-29 11:01:23

标签: regex linux bash

这可能是愚蠢的,但是我无法获得所需的输出。

我在目录中有一个名为Abc_sfgf_kjwefgk.txt20180929_040845的文件。

我正在尝试使用以下命令列出文件: ls -l Abc_sfgf_kjwefgk.txt[0-9]{8}_[0-9]{4}

但这给了我错误:ls: cannot access 'Abc_sfgf_kjwefgk.txt[0-9]{8}_[0-9]{4}': No such file or directory

与此同时,使用以下命令:ls -l Abc_sfgf_kjwefgk.txt[0-9]*?_[0-9]*?

给我正确的结果。

我的初始命令出了什么问题?

2 个答案:

答案 0 :(得分:1)

{8}是文字字符串。由于您没有任何包含{的文件名,因此全局正则表达式[0-9]不会扩展。您的命令是 literally ls -l 'Abc_sfgf_kjwefgk.txt[0-9]{8}_[0-9]{4}'。由于没有文件Abc_sfgf_kjwefgk.txt[0-9]{8}_[0-9]{4},因此您会收到ls的错误消息,表明没有这样的文件。

您可能想写

ls -l Abc_sfgf_kjwefgk.txt[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]

find -maxdepth 1 -regextype egrep -regex '.*/Abc_sfgf_kjwefgk.txt[0-9]{8}_[0-9]{4}' \
     -exec ls -l {} \;

答案 1 :(得分:1)

您的 SECOND 命令似乎一切正常。在这里,您可以正确使用globbing

如果您想解析ls,则应使用以下方式:

ls | grep -E 'Abc_sfgf_kjwefgk.txt[0-9]{8}_[0-9]{4}'