Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 无法识别的命令_Regex_Bash_Awk_Sed - Fatal编程技术网

Regex 无法识别的命令

Regex 无法识别的命令,regex,bash,awk,sed,Regex,Bash,Awk,Sed,我正在尝试匹配模式并打印上面的几行,使用sed我可以做到这一点,但在脚本中我无法通过。我得到以下信息,它将参数作为命令,如何避免这种情况 这是我的简单for循环脚本 #!/bin/sh for i in `cat test.txt` do echo "***************************************************************************" echo '\n' echo $i sed -n "'1,/$i/p' debug.log

我正在尝试匹配模式并打印上面的几行,使用sed我可以做到这一点,但在脚本中我无法通过。我得到以下信息,它将参数作为命令,如何避免这种情况

这是我的简单for循环脚本

#!/bin/sh
for i in `cat test.txt`
do
echo "***************************************************************************"
echo '\n'
echo $i
sed -n "'1,/$i/p'  debug.log | tail -14"
echo '\n'
echo "***************************************************************************"
done
sed-n“'1,/Ref555330/p'debug.log | tail-14”


请指导我解决此问题。

仅对sed命令使用双引号

sed -n "1,/$i/p"  debug.log | tail -14

sed并不是一个合适的工具,任何时候你在shell中写一个循环只是为了操纵文本,你都有错误的方法。看起来您有一个名为test.txt的正则表达式文件,并且希望从其他文件debug.log中获取每个RE上方的14行。这只是一个简单的awk命令,类似这样(未经测试,因为您没有提供任何示例输入或预期输出):

awk'
NR==FNR{res[$0];next}
{
第[FNR]行=0美元
for(re in res)
如果($0~re)
点击[FNR]
下一个
}
结束{

对于(i=1;i)sed-n“'1,/$i/p'debug.log | tail-14”
应该做什么?它将打印匹配模式中的上述13行。您将sed“'1,/$i/p'debug.log | tail-14”作为命令输入。删除所有引号并用双引号括住sed命令,即“1,/$i/p”感谢它的工作,但是sed有什么问题?有时它打印了13行错误的行,甚至图案不匹配:-(当模式不匹配时,
sed
倾向于将
1,/pattern/
视为
1,$
——也就是说,它只打印整个文件,这使得范围规范没有意义……这是因为
sed
的工作方式是从第1行开始,直到找到匹配行,它在每行执行请求的操作。它实际上并没有首先尝试查找范围。感谢您的详细解释,兄弟,这真的很有帮助。它说语法错误。awk:第6行附近的语法错误awk:第6行附近的非法语句awk:第12行附近的语法错误awk:第12行附近的非法语句awk:第20行附近的语法错误这是一台solaris机器每当您收到错误消息时,它都会告诉我您正在使用旧的、损坏的awk(/usr/bin/awk,在Solaris上)。永远不要使用awk,因为它已经很旧了。在Solaris上使用/usr/xpg4/bin/awk或nawk。非常感谢它的工作方式很有魅力,但是当我处理倍数时,它会说“限制超过了错误”吗?有没有可能避免这种情况?你必须更具体地说明“倍数”(什么的倍数)是什么意思并复制/粘贴错误消息。
sed -n "1,/$i/p"  debug.log | tail -14
awk '
NR==FNR { res[$0]; next }
{
    line[FNR] = $0
    for (re in res)
        if ($0 ~ re)
            hit[FNR]
    next
}
END {
    for (i=1; i<=FNR; i++) {
        if (i in hit) {
            print "***************************************************************************"
            for (j=i-14; j<=i; j++)
                print line[j]
            print "***************************************************************************"
        }
    }
}
' test.txt debug.log