Aakash Kushwaha Aakash Kushwaha - 2 months ago 13
Bash Question

Using grep and * to get the exact file name

I have following heapdump files

AppSrv01]# ls -ltr *heapdump*
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3436
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3435
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3434
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3433
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3432
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3431
-rw-r--r-- 1 root root 0 Sep 13 17:03 heapdump.dfsdf


now if I use

ls -ltr| grep heapdump*


I get following output

AppSrv01]# ls -ltr |grep heapdump*
-rw-r--r-- 1 root root 0 Sep 13 17:03 heapdump.dfsdf


But I use

ls -ltr |grep *heapdump*


I get no output. Could anybody help where is my mistake and how to search the heapdump files.

My expected output is

ls -ltr | grep *heapdump*


should give me

-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3436
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3435
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3434
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3433
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3432
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3431
-rw-r--r-- 1 root root 0 Sep 13 17:03 heapdump.dfsdf


due to some reason I could not use

ls -ltr *heapdump*

Answer

It looks like you're confusing glob patterns with regular expressions, which is what grep uses.

The correct way to print a list of files containing the word heapdump is like this:

printf '%s\n' *heapdump*

Here, *heapdump* is glob-expanded by the shell to match anything followed by "heapdump" followed by anything else. All the files that match the pattern are passed to printf, which prints each one followed by a newline.

If you want to filter the output of ls -ltr, then you can use:

ls -ltr *heapdump*

The same list of files will be passed to ls, which will print information about them.

Bear in mind that it is not recommended to attempt to parse the output of ls.

Comments