While we use
* to denote zero or more previous characters in
grep, we use
*.c to find all C files when we use it with the
ls command like
ls *.c. Could someone tell how the use of
* differs in these two cases?
Shell file name globbing and regular expressions use some of the same characters, and they have similar purposes, but you're right, they aren't compatible. File name globbing is a much less powerful system.
In file name globbing:
But in regexes, you have to use
Square brackets (
These differences mean the two systems are only directly interchangeable for simple cases. If you need regex matching of file names, you need to do it another way.
Answering to the question expressed in the original title (Why do regular expressions differ from that used to filter files):
File name expansion predates regular expressions, already existed with most operating systems (wildcard/joker characters) and is much simpler and intuitive than the latter.