How to include a space character with grep?

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?

Asked By: solfish

||

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.

Answered By: Zanna
Categories: Answers Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.