如何在行末使用反斜杠来 grep 一行?

如何在行末使用反斜杠来 grep 一行?

我正在尝试 grep 一行,行尾带有反斜杠,例如:

abc\
def
ghij
...

我希望它可以 grep 行“abc\”。我尝试了下面的命令,但没有用。

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

我该如何解决这个问题?我只是不知道 grep 中转义字符的逻辑。该表达式在 vim 中确实有效。

答案1

grep '\\$' test_file

在 Solaris 9 和 Ubuntu 12.04 上对我来说运行良好。

单引号和双引号的区别在于哪些字符是按字面意思理解,哪些是用作转义/特殊字符。

答案2

我通过以下方法克服了这个问题:

grep -Hn  "\\\\$"

但我不确定为什么四个反斜杠在这里会起作用。它就是起作用了。

答案3

从“ man grep”命令:

-F, --fixed-strings 将 PATTERNS 解释为固定字符串,而不是正则表达式。

-o, --only-matching 仅打印匹配行中匹配的(非空)部分,每个部分位于单独的输出行上。

此外,您必须用单引号括住目标才能捕获准确的字符:

输入:

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

输出:

\

相关内容