2011-08-04 39 views
6

我试图扫描错误日志中有503个错误的行,所以我正在寻找" 503(引用空间503)。带引号的grep

这看似简单,但它不会工作:

grep '" 503 ' access.log 

我得到以下错误:

bash: -c: line 0: unexpected EOF while looking for matching `"' bash: -c: line 1: syntax error: unexpected end of file

+1

这应该工作。你确定你没有别名grep或类似的东西? “哪个grep”? “type grep”? – pyroscope

+0

错误消息显示“bash -c”,那么你是否在尝试在单引号内嵌入单引号? –

+0

嗯,按照你的意愿在bash中为我工作 –

回答

0

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

8

好像你是通过一些系统中运行它()在一些语言,你不是吗?尝试:

grep '\" 503 ' access.log 

或:

grep "\" 503 " access.log 

直接在外壳只是grep '" 503 ' access.log会工作。要重现您的问题,我必须做:

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

这确实是语法错误。为了做到这一点,我需要:

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

你是不知何故叫bash -c ...。也许间接。你需要指出你是如何调用它来找出碰撞中的引号。

+0

否,直接在炮弹中。我已经尝试过你提示没有运气的两个例子。 – dtbarne

+0

这很奇怪。你能发布“type grep”和“echo $ 0”的输出吗? –

1

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

0

我相信我现在正在工作(不确定,因为我没有结果,但没有得到一个错误)。

的原因是因为我使其通过SSH如下命令,我相信SSH是做一些挂羊头卖狗肉逃生:

ssh 123.123.123.123 grep '" 503 ' access.log 

它Modifiying这似乎是修复:

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

感谢大家的时间。

+2

这不是ssh做的诡计,它是shell。你的本地shell解释单引号,并从''“503”参数中删除它们,然后将这些参数传递给ssh,然后ssh将它获得的参数传递给远程系统的shell。一个无与伦比的双引号字符(可能还有一点比这更多,但这是一般的想法。) –

+0

@Keith完全正确。由于您的命令会被解释两次(一次由您的本地shell执行,而另一次由远程shell执行),通常必须引用一次的任何内容都必须被引用两次。 – jw013

+0

谢谢,虽然我意识到了这一点。只是更容易称它为骗局。 :) – dtbarne