grep无法找到所有模式匹配“\[\[\[\[";

grep无法找到所有模式匹配“\[\[\[\[";,grep,Grep,我在使用grep和管道时遇到问题。情况如下: 我正在运行一个python脚本,该脚本输出(使用print)到屏幕调试消息。我使用/prog|grep“\[\[\[\[”捕获其中包含“[[[]”的字符串。它返回的匹配结果很少,但不返回其他结果(另一个观察结果:grep找到的结果在文件中grep没有找到的结果之前)。我在没有管道和grep的情况下运行了/prog,它输出了所有带有“[[[[]”模式的字符串。错误消息通常发送到stderr,而不是stdout;管道正在过滤stdout(您的“另一个观察

我在使用grep和管道时遇到问题。情况如下:
我正在运行一个python脚本,该脚本输出(使用print)到屏幕调试消息。我使用
/prog|grep“\[\[\[\[”
捕获其中包含“[[[]”的字符串。它返回的匹配结果很少,但不返回其他结果(另一个观察结果:grep找到的结果在文件中grep没有找到的结果之前)。我在没有管道和grep的情况下运行了
/prog
,它输出了所有带有“[[[[]”模式的字符串。

错误消息通常发送到
stderr
,而不是
stdout
;管道正在过滤
stdout
(您的“另一个观察”提示了这一点。)您可以将
stderr
以及
stdout
重定向到管道:

./prog 2>&1 | grep '\[\[\[\['

问题在于左方括号是正则表达式中的一个特殊字符。“grep”不仅仅是一个字符串匹配器。正则表达式是一种复杂的语言,可以让您描述文本模式。grep试图将
[[
解释为正则表达式,而不仅仅是字符串

正如你的问题主题所暗示的,你通常可以用反斜杠来转义特殊字符。因此,以下方法可能有效:

./prog | grep '\[\[\[\['
您还可以通过将方括号放在方括号内来“转义”方括号。因此,如果您的grep版本能够处理它,那么,

您还需要确定您的程序,
/prog
,是否正在将输出发送到“标准输出”或“标准错误”。您可以使用以下命令将所有stderr通过管道:

./proc 2>&1 | egrep '[[]{4}'
更新:

[ghoti@pc ~]$ printf '[[[[\n[[[\n[[[[\n[[[[[\n[[\n' | grep '\[\[\[\['
[[[[
[[[[
[[[[[
[ghoti@pc ~]$ printf '[[[[\n[[[\n[[[[\n[[[[[\n[[\n' | egrep '[[]{4}'
[[[[
[[[[
[[[[[
[ghoti@pc ~]$  

显然,我的结果与您的不匹配。如果您能提供更多有关您正在处理的数据的详细信息,这将有助于尝试复制您的结果。

很抱歉没有说清楚,但当我说我正在使用“打印”打印消息时,我假设所有消息都将转到stdout。无论如何,我已经尝试了您的建议很好,但是没有帮助。还有其他想法吗?你可能需要用更多细节更新你的问题。这样做的时候也要遵循标记帮助链接,这样你的示例就不会被误解为HTML。Ghoti,谢谢你的回答。我之前没有提过,但我正在使用转义序列进行匹配模式(正如您描述的第一个选项)。但问题是,我将前两条语句打印到屏幕上,而不是最后两条,尽管它们遵循相同的模式。此外,由于我只是使用“打印”功能将它们打印到屏幕上,这与stderr无关。无论如何,我也尝试过这种方法,但没有成功。还有其他想法吗非常感谢。@user1126425-鉴于您问题的详细程度,我提供的答案是我能想到的最好的答案。如果您能用示例数据更新您的问题,以便复制您的结果,那么我可能能够找出您遇到的问题。目前为止,这是我所能做的。