0

我需要将变量值传递给 sed 命令。这是描述,我在做什么。

我正在为变量赋值:

export ALSIZE=14420 $ echo $ALSIZE 14420

现在我在 sed 命令中使用该值从 $ALSIZE 行读取文件到文件末尾。我得到了错误

$  sed -n '$ALSIZE,$p' /db1/u04/oradata/GG11/ggserr.log
Unrecognized command: $ALSIZE,$p ====== >> 

使用“”(双引号)中的变量值仍然出错。

$ sed -n '"$ALSIZE",$p' /db1/u04/oradata/GG11/ggserr.log
Unrecognized command: "$ALSIZE",$p  ===== >>> 

我收到回复

$ sed -n '14420,$p' /db1/u04/oradata/GG11/ggserr.log

2013-12-26 06:36:17  INFO    OGG-01026  Oracle GoldenGate Capture for Oracle, dpsbprd.prm:  Rolling over remote file ./dirdat/siebel/r1003911.

2013-12-26 06:43:31  INFO    OGG-01026  Oracle GoldenGate Capture for Oracle, dpsbprd.prm:  Rolling over remote file ./dirdat/siebel/r1003912.
2013-12-26 11:07:47  INFO    OGG-01026  Oracle GoldenGate Capture for Oracle, dpsbprd.prm:  Rolling over remote file ./dirdat/siebel/r1003913.

我在做什么错。你能建议吗?

4

3 回答 3

1

所有这些都会起作用:

sed -n $ALSIZE',$p' /db1/u04/oradata/GG11/ggserr.log
sed -n "$ALSIZE"',$p' /db1/u04/oradata/GG11/ggserr.log
sed -n "$ALSIZE,\$p" /db1/u04/oradata/GG11/ggserr.log

关键是了解引用的工作原理:

  • 您可以引用字符串的一部分或全部:hello, hel'lo', 'hello','hel''lo'与 shell 相同
  • 双引号内的shell变量扩展为它们的值:"$ALSIZE"扩展为"14420"不需要引号,所以你可以简单地写$ALSIZE而不用引号
  • 单引号内的 Shell 变量未扩展,因此'$ALSIZE'将使用文字文本“$ALSIZE”,这不是您想要的
  • "$ALSIZE,\$p"示例中,必须对第二个$进行转义以防止 shell 扩展$p变量,该变量可能没有值
于 2013-12-27T10:06:52.650 回答
0

单引号表示 $ALSIZE 中的 '$' 扩展为文字 "\$ALSIZE"。如果将其重写为:

sed -n $ALSIZE',$p' /db1/u04/oradata/GG11/ggserr.log

(将单引号保留到 $ALSIZE 变量之后)?

于 2013-12-26T21:23:04.057 回答
0

使用双引号:

kent$  s=5

kent$  seq 10 |sed -n "$s,$ p"
5
6
7
8
9
10
于 2013-12-26T21:32:41.813 回答