Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式在grep中出错_Regex_Grep - Fatal编程技术网

Regex 使用正则表达式在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中的一个错误。如果我在命令行上对db日志运行这个grep语句,它运行得很好

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”