I'm trying to grep a line with a backslash at the end of the line like:


I hope it can grep the line "abc\". I tried the command below but they didn't work.

grep -EHn "\\$" test_file
grep -PHn "\\$" test_file

How should I solve this problem? I just don't know the logic of escape character in grep. The expression did work in vim.

3 Answers 3

grep '\\$' test_file

works fine for me on Solaris 9 and Ubuntu 12.04.

Single quotes and double quotes differ in which characters are taken literally or used as escape/special characters.

  • It doesn't work on mine. GNU grep 2.6.3. Red Hat Jan 23, 2014 at 6:41

I somehow overcame the problem by using below:

grep -Hn  "\\\\$"

But I'm not sure why four back slash would work here. It just worked.

  • 1
    Don't use double quotes here. Double quotes do not preserve literal $, \, and backticks. In your case, \\ becomes a \, and \$ becomes a $ before being passed to grep, and only then grep looks for \$. Try echo "\\\\$" to see why.
    – slhck
    Jan 23, 2014 at 8:47

From "man grep" command:

-F, --fixed-strings Interpret PATTERNS as fixed strings, not regular expressions.

-o, --only-matching Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.

Also, you have to surround your target with a single quote mark to capcher the exact character:


$echo " this is a backslash -- > '\' " | grep -oF '\'



Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.