我正在尝试 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 '\'
输出:
\