I have a file named example
$ cat example kali.pdf linux.pdf ubuntu.pdf example.pdf. this.pdf grep .pdf and when I use grep to get the line that has a space before .pdf, I can't seem to get it.
grep *.pdf example returns nothing, (I want to say, "grep, match zero or more spaces before .pdf", but no result)
and if I use:
grep i*.pdf example kali.pdf linux.pdf ubuntu.pdf example.pdf. this.pdf grep .pdf all lines return, because I'm saying "grep, match me i one or zero times, ok."
and lastly:
grep " *.pdf" example no result returns
For this sample, I want to see
grep .pdf as output
What is wrong with my thought?
01 Answer
Make sure you quote your expression.
$ grep ' \.pdf' example grep .pdf Or if there might be multiple spaces (we can't use * as this will match the cases where there are no preceding spaces)
grep ' \+\.pdf' example + means "one or more of the preceding character". In BRE you need to escape it with \ to get this special function, but you can use ERE instead to avoid this
grep -E ' +\.pdf' example You can also use \s in grep to mean a space
grep '\s\+\.pdf' example We should escape literal . because in regex . means any character, unless it's in a character class.