46

我正在尝试将 ER (扩展正则表达式)lslike一起使用ls .+\..+

我正在尝试打印所有包含扩展名的文件(我知道我可以使用ls *.*,但我想尝试使用 ER)。

当我运行该代码时,我收到此错误:ls: .+..+: No such file or directory.

4

2 回答 2

105

您将正则表达式与shell globbing混淆了。如果你想使用正则表达式来匹配文件名,你可以这样做:

$ ls | egrep '.+\..+'
于 2013-03-11T18:38:27.933 回答
5

您没有说您使用的是什么 shell,但它们通常不支持正则表达式,尽管有常见的 *nix CLI 工具(grep,sed等)可以支持。

像 bash 这样的 shell 支持的是globbing,它使用一些类似的字符(例如,*)但不是一回事。

较新版本的 bash 确实有一个正则表达式运算符,=~

for x in `ls`; do 
    if [[ $x =~ .+\..* ]]; then 
        echo $x; 
    fi; 
done
于 2013-03-11T18:43:02.500 回答