Regex 使用正则表达式在grep中出错
我想我已经发现了grep中的一个错误。如果我在命令行上对db日志运行这个grep语句,它运行得很好Regex 使用正则表达式在grep中出错,regex,grep,Regex,Grep,我想我已经发现了grep中的一个错误。如果我在命令行上对db日志运行这个grep语句,它运行得很好 grep "Query Executed in [[:digit:]]\{5\}.\?" db.log 我得到这个结果: 19699.188毫秒执行的查询;“从/xyztable…..中选择不同的* 当我在脚本中运行它时 LONG_QUERY=`grep "Query Executed in [[:digit:]]\{5\}.\?" db.log` 结果中的星号将替换为当前目录中所有文件的列表
grep "Query Executed in [[:digit:]]\{5\}.\?" db.log
我得到这个结果:
19699.188毫秒执行的查询;“从/xyztable…..中选择不同的*
当我在脚本中运行它时
LONG_QUERY=`grep "Query Executed in [[:digit:]]\{5\}.\?" db.log`
结果中的星号将替换为当前目录中所有文件的列表
echo $LONG_QUERY
结果:
19699.188毫秒内执行的查询;“从/xyztable…..中选择不同的
有人见过这种行为吗?这不是grep中的错误。这是您理解脚本如何解释的一个错误 如果我用脚本编写:
echo *
echo "*"
我将得到一个文件名列表,因为shell(不是grep,而是/bin/bash或/bin/sh或您使用的任何shell)会将一个不带引号的星号解释为替换与模式“*”匹配的文件名的请求,也就是说所有文件名
如果我用脚本编写:
echo *
echo "*"
我将得到一个'*',因为它位于带引号的字符串中
如果我写:
STAR="*"
echo $STAR
STAR="*"
echo "$STAR"
我将再次获取文件名,因为我在将其分配给变量时引用了星号,但当我将该变量替换到命令中时,它变为未引用
如果我写:
STAR="*"
echo $STAR
STAR="*"
echo "$STAR"
我会得到一颗星星,因为双引号允许变量插值
您正在命令周围使用反引号,即“characters”。它将命令的输出捕获到变量中
我建议,如果您要回显命令的结果,而不是其他什么,那么您应该将结果重定向到一个文件中。(毕竟,由于日志文件已满,当长_查询包含10000行输出时,您将怎么做?)
除此之外,至少要回显“$LONG\u QUERY”(双引号)。当我发布此消息时,第二个结果应该是从/xyztable中选择不同的文件file2 file3。。。。我把文件放在括号里,当我发布这个问题时,它似乎删除了括号里的所有内容。编辑你的帖子,这是非常值得期待的,可以通过引用来抑制:
echo“$LONG\u QUERY”
。