Bash 带引号的Grep

Bash 带引号的Grep,bash,grep,Bash,Grep,我正在尝试扫描错误日志以查找包含503个错误的行,因此我正在搜索“503(引用空格503) 这似乎很简单,但行不通: grep '" 503 ' access.log 我得到以下错误: bash:-c:第0行:查找匹配的“%”时出现意外的EOF bash:-c:第1行:语法错误:意外的文件结尾 看起来您是通过某种语言的system()运行它的,不是吗?尝试: grep '\" 503 ' access.log 或: 直接在shell中,只需grep'503'访问。log即可。要重现您的问题,

我正在尝试扫描错误日志以查找包含503个错误的行,因此我正在搜索
“503
(引用空格503)

这似乎很简单,但行不通:

grep '" 503 ' access.log
我得到以下错误:

bash:-c:第0行:查找匹配的“%”时出现意外的EOF bash:-c:第1行:语法错误:意外的文件结尾


看起来您是通过某种语言的system()运行它的,不是吗?尝试:

grep '\" 503 ' access.log
或:

直接在shell中,只需
grep'503'访问。log
即可。要重现您的问题,我必须执行以下操作:

bash -c 'grep '\" 503 ' access.log'
这确实是语法错误。要使其正常工作,我需要:

bash -c 'grep "\" 503 " access.log'

您正在以某种方式调用
bash-c…
。可能是间接的。您需要了解它是如何调用的,以了解哪些引号发生冲突。

要调试类似这样的奇怪效果,请使用“set-x”来显示shell扩展,以及计算机对您的命令的看法。

我相信它现在可以工作了(不确定,因为我没有得到结果,但没有得到错误)

原因是我通过ssh命令传递它,如下所示,并且我相信ssh在做一些转义欺骗:

ssh 123.123.123.123 grep '" 503 ' access.log
将其修改为此似乎是解决方案:

ssh 123.123.123.123 "grep '\" 503 ' access.log"

谢谢大家的时间。

问题是由于
中的一些错误指令造成的。bashrc

这应该可以工作。您确定没有别名grep或类似的东西吗?“哪个grep”?“键入grep”?错误消息显示“bash-c”,那么你是在尝试在单引号中嵌入单引号吗?嗯,我在bash中的工作原理与你的完全相同是的,我经常使用grep,没有任何问题。@Michael“问题”在现代的shell中,它们通常会自动地将类似这样的东西漏掉,直接放在shell中。我已经尝试了你建议的两个示例,但都没有成功。这很奇怪。你能发布“type grep”和“echo$0”的输出吗?不是ssh在耍花招,而是shell。您的本地shell解释单引号,并将它们从
''503'
参数中去掉,然后将这些参数传递给ssh。ssh然后将它得到的参数(未更改)传递给远程系统上的shell。该shell看到一个不匹配的双引号字符。(可能不止这些,但这是一般的想法。)@Keith完全正确。因为您的命令会被解释两次(一次由本地shell解释,另一次由远程shell解释)凡是平时必须引用一次的话,就必须引用两次。谢谢,不过我知道这一点。更容易称之为欺骗。:)
ssh 123.123.123.123 "grep '\" 503 ' access.log"