sed无法识别的命令

时间:2014-10-16 19:03:15

标签: 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 | tail -14"
echo '\n'
echo "***************************************************************************"
done
  

sed -n“'1,/ Ref555330 / p'debug.log | tail -14”

Unrecognized command: '1,/Ref555330/p'  debug.log | tail -14

请指导我解决这个问题。

2 个答案:

答案 0 :(得分:2)

仅为sed命令提供双引号

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

答案 1 :(得分:0)

对于涉及超过1行的任何事情而言,sed不是正确的工具,只要你在shell中编写一个循环,只是为了操作文本你就有错误的方法。看起来您有一个名为test.txt的正则表达式文件,并且您希望从其他文件debug.log获取每个RE上面的14行。这只是一个简单的awk命令,类似这样(未经测试,因为你没有提供任何样本输入或预期的输出):

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