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?
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.