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'はシェルにとってすべて同じです
  • 二重引用符内のシェル変数は、その値に展開されます:"$ALSIZE"に展開されます。"14420"これは引用符で囲まれる必要がないため、引用符を付け$ALSIZEずに単純に記述できます。
  • 一重引用符内のシェル変数は展開されないため'$ALSIZE'、リテラル テキスト "$ALSIZE" が使用されますが、これは必要なものではありません。
  • この"$ALSIZE,\$p"例では$、シェルが$p変数を展開しないようにするために、2 番目をエスケープする必要があります。おそらく値はありません。
于 2013-12-27T10:06:52.650 に答える