我正在尝试将 ER (扩展正则表达式)与ls
like一起使用ls .+\..+
。
我正在尝试打印所有包含扩展名的文件(我知道我可以使用ls *.*
,但我想尝试使用 ER)。
当我运行该代码时,我收到此错误:ls: .+..+: No such file or directory
.
您将正则表达式与shell globbing混淆了。如果你想使用正则表达式来匹配文件名,你可以这样做:
$ ls | egrep '.+\..+'
您没有说您使用的是什么 shell,但它们通常不支持正则表达式,尽管有常见的 *nix CLI 工具(grep
,sed
等)可以支持。
像 bash 这样的 shell 支持的是globbing,它使用一些类似的字符(例如,*)但不是一回事。
较新版本的 bash 确实有一个正则表达式运算符,=~
:
for x in `ls`; do
if [[ $x =~ .+\..* ]]; then
echo $x;
fi;
done