将变量传递给sed命令

时间:2013-12-26 21:16:19

标签: sed oracle11g oracle-golden-gate

我需要将变量值传递给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.

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

3 个答案:

答案 0 :(得分: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

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

  • 您可以引用部分字符串或全部字符串:hellohel'lo''hello''hel''lo'与shell完全相同
  • 双引号内的Shell变量会扩展为它们的值:"$ALSIZE"扩展为"14420",不需要引用,因此您可以简单地编写$ALSIZE而不引用< / LI>
  • 单引号中的Shell变量未展开,因此'$ALSIZE'将使用文字文本“$ ALSIZE”,这不是您想要的
  • "$ALSIZE,\$p"示例中,必须对第二个$进行转义,以防止shell扩展$p变量,该变量可能没有值

答案 1 :(得分:0)

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

会发生什么
sed -n $ALSIZE',$p' /db1/u04/oradata/GG11/ggserr.log

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

答案 2 :(得分:0)

使用双引号:

kent$  s=5

kent$  seq 10 |sed -n "$s,$ p"
5
6
7
8
9
10