How to grep a line with a backslash at the end of the line?

4

1

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

abc\
def
ghij
...

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.

Marcus Thornton

Posted 2014-01-23T04:16:30.080

Reputation: 211

Answers

6

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.

djg

Posted 2014-01-23T04:16:30.080

Reputation: 320

It doesn't work on mine. GNU grep 2.6.3. Red Hat – Marcus Thornton – 2014-01-23T06:41:42.447

3

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.

Marcus Thornton

Posted 2014-01-23T04:16:30.080

Reputation: 211

1Don'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 – 2014-01-23T08:47:53.203