Reputation: 2686
I am trying to use ER (Extended Regular Expressions) with ls
like ls .+\..+
.
I am trying to print all files which contains an extension
(I know I could have used ls *.*
, but I wanted to try using ER).
When I run that code I get this error: ls: .+..+: No such file or directory
.
Upvotes: 55
Views: 141513
Reputation: 11566
You don't say what shell you are using, but they generally don't support regular expressions that way, although there are common *nix CLI tools (grep
, sed
, etc) that do.
What shells like bash do support is globbing, which uses some similiar characters (eg, *) but is not the same thing.
Newer versions of bash do have a regular expression operator, =~
:
for x in `ls`; do
if [[ $x =~ .+\..* ]]; then
echo $x;
fi;
done
Upvotes: 6
Reputation: 85875
You are confusing regular expression with shell globbing. If you want to use regular expression to match file names you could do:
$ ls | egrep '.+\..+'
Upvotes: 117