将值打印到sed -n中

时间:2012-09-17 14:28:00

标签: sed grep

我使用sed从欲望点获取文件的内容,但我遇到了问题。

我无法在此sed命令中打印$variable

count=$(sed -n '/$variable/,$p' file.log | grep '"KO"' -c)

我尝试使用双引号并关闭单个但不能正常工作

count=$(sed -n "/$variable/,$p" file.log | grep '"KO"' -c) ERROR意外`,' count=$(sed -n '/'$variable'/,$p' file.log | grep '"KO"' -c) ERROR未终结地址正则表达式

我知道sed研究是letteral“$ variable”但是我无法传递价值......

提前致谢。

2 个答案:

答案 0 :(得分:2)

这是一个引用正确的问题。

你的第一个例子:

count=$(sed -n '/$variable/,$p' file.log | grep '"KO"' -c)

不展开$variable,因为它是单引号,第二个:

count=$(sed -n "/$variable/,$p" file.log | grep '"KO"' -c)

展开$variable,但其内容存在问题,如 choroba 所述。它还有$p的问题,它将被解释为shell变量。你的第三个例子:

count=$(sed -n '/'$variable'/,$p' file.log | grep '"KO"' -c)

非常接近您的需求,但如果$variable包含特别处理的字符,则仍会受到影响,因此需要对其进行转义,例如:以下作品:

variable="\[17-09-12 00:01:03\]"
count=$(sed -n '/'$variable'/,$p' file.log

由于括号对于shell也是特殊的,您可以使用printf %q指令自动转义它们:

variable="[17-09-12 00:01:03]"
variable=$(printf "%q" "$variable")
count=$(sed -n '/'$variable'/,$p' file.log

答案 1 :(得分:1)

[sed中具有特殊含义。我会使用比sed更强大的东西,即Perl。它可以为你逃避变量:

perl -ne '/\Q'"$variable"'\E/ and print'