我需要将变量值传递给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.
我在做什么错。你能建议吗?
答案 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
关键是要了解引用的工作原理:
hello
,hel'lo'
,'hello'
,'hel''lo'
与shell完全相同"$ALSIZE"
扩展为"14420"
,不需要引用,因此您可以简单地编写$ALSIZE
而不引用< / LI>
'$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