I want to search a filename which may contain kavi or kabhi. I wrote command in the terminal:
ls -l *ka[vbh]i*
Between ka and i there may be v or bh .
The code I wrote isn't correct. What would be the correct command?
A nice way to do this is to use extended globs. With them, you can perform regular expressions on Bash.
To start you have to enable the extglob
feature, since it is disabled by default:
shopt -s extglob
Then, write a regex with the required condition: stuff + ka
+ either v
or bh
+ i
+ stuff. All together:
ls -l *ka@(v|bh)i*
The syntax is a bit different from the normal regular expressions, so you need to read in Extended Globs that...
@(list): Matches one of the given patterns.
$ ls
a.php AABB AAkabhiBB AAkabiBB AAkaviBB s.sh
$ ls *ka@(v|bh)i*
AAkabhiBB AAkaviBB