[Solved] Wildcards used in find, ls and grep commands
Platforms : Solaris 10 and RHEL 5.6
I always get double quotes , single quotes and asteriks mixed up for find, ls and grep commands.
The below commands retrieve the correct results. But , unders stress , I get all these mixed up .So, i wanted to get a clear picture.
Please check if my assumptions mentioned below are correct. The below tests are conducted in Solaris 10
I. find Command
For find command, the wildcard character is asterik and it should be enclosed in double quotes. II. grep Command
For grep, the wildcard character is asterik and it should be enclosed in single quotes. III. ls Command
For ls command, wildcard character is again asterik, but don't use single quotes or Double quotes.
The shell does things to certain characters you type. * and ? or ??? or ?????? are all expanded into filenames. BEFORE the command actually runs. This is called globbing.
? expands into all files named with a single character like q
??? expands into all three character file names
?????? all 6 character file names
* expands into all file names in the current directory
The characters are called metacharacters because they do not behave like most things you can type.
You turn off globbing by surrounding the phrase or symbol with the single tic ' or the double quote "
Next.
There are other metacharacters - $ is the prefix for asking the shell to find the value of a variable. Double quotes play unfairly. They let the shell work on all of the $ metacharacters inside double quotes. Not so inside single ticks (or single quotes).
So. grep uses regular expressions. *,?, and $ are used in regexes all the time.
You use single tics to block them off from the shell's evil influence. Things would work out fine with grep "pattern" if the pattern had no $ int it. In fact
works great to find the string==me. No quotes at all.
needs double quotes to me and you to force it into a SINGLE pattern, again turning off the evil influence of the shell which would otherwise make it TWO patterns. And confuse the heck out of grep.
uses -F to turn off regular expressions for grep.
This is how you look for a metacharacter in a file. But you still have to stop the evil influence of the shell. " " do that for the * character. But not the $ character.
' ' single tics make the stuff inside completely immune to the shell.
" " gives partial immunity to to the shell.
Finally, since all ls cares about is file names, letting the shell mess with metacharacters is cool.
Last edited by vbe; 11-13-2012 at 10:53 AM..
Reason: missing /...
This User Gave Thanks to jim mcnamara For This Post:
greetings,
below is the find command i am using for some filesystem maintenance:
find /data/Engine \( -type d -name .snapshot -prune -o -type d -wholename "/data/Engine/*/CAE" \
-prune -o -type d -wholename "/data/Engine/*/CAD" -prune -o -name ".*.case" \)\
-mtime +365 -print0 -fls... (5 Replies)
job_count=`grep -e "The job called .* has finished | The job called .* is running" logfile.txt | wc -l`
Any idea how to count those 2 patterns so i have a total count of the finished and running jobs from the log file?
If i do either of the patterns its works okay but adding them together... (8 Replies)
Platform: AIX 6.1/ksh
Question1.
I want to grep for the string "CUSTOM_PKMS" in all the files in server except those files with extensions .dbf , .ctl and .dmp
I started running the following command but it is taking too long because there are lots of .dbf , .ctl and .dmp files in this... (6 Replies)
Hi all
I want to search for number in file presented with wildcard as shown below.
cat file.txt
1405
1623
1415
.......
.......
How to search for the number 141526 for example?
If the number exist print "Number 141526 exist" if no, print "The number not exist"
Thank you in advance. (3 Replies)
Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted!
1. The problem statement, all variables and given/known data:
List all files in ~c12100 directory beginning with "BOZO" that end with either "123" or "456"
2. Relevant... (3 Replies)
Use and complete the template provided. If you don't, your post may be deleted!
1. The problem statement, all variables and given/known data:
I have to make as home work several commands with gerp find and sed
2. Relevant commands, code, scripts, algorithms:
FIND command
-use command find... (8 Replies)
Hi
I have 2 directories t1 and t2 with some files in it. I have to see whether the files present in t1 is also there in t2 or not. Currently, both the directories contain the same files as shown below:
$ABC.TXT
def.txt
Now, when I run the below script, it tells def.txt is found,... (5 Replies)
Folks;
First about find:
when i run this:
find . -name '*log*' -mtime +10 -print | sed 's+^\./++;s+/.*++' | sort -u
i got list of log files but also get a directories (although directory names doesn't have "log" in it).
How can i exclude the directory from the output of this find command? ... (2 Replies)
I'm having trouble with the following commands
i. count the number of lines which end in a 4 letter word
grep '{4\}$' bfile <<seems to print out everything
abc abc abcd
joe joe john
bob bill
gregory greg
greg gregory
the grep command prints out the lines with 4 letter words and the... (3 Replies)
Hi guys,
a small problem today, I'm grepping a log file containing lines like this below:
Mar 09 16:04:00 blabla
Mar 09 16:04:02 blabla
Mar 09 16:04:05 blabla
Mar 09 16:04:15 blabla
Mar 09 16:05:06 blabla
Mar 09 16:05:23 blabla
Mar 09 16:05:25 blabla
... in this file I'm grepping... (5 Replies)