1

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

我无法将$variable值打印到此 sed 命令中

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

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

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

我知道 sed 研究是字母 "$variable" 但我无法传递值...

提前致谢。

4

2 回答 2

2

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

你的第一个例子:

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

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

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

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

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

非常接近您的需要,但如果$variable包含 sed 特别对待的字符,仍然会受到影响,因此需要对这些字符进行转义,例如以下作品:

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
于 2012-09-17T15:10:32.040 回答
1

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

perl -ne '/\Q'"$variable"'\E/ and print'
于 2012-09-17T14:45:02.930 回答