1

sedを使用して、目的のポイントからファイルのコンテンツを取得しますが、問題があります。

$variableこのsedコマンドに値を出力できません

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

二重引用符で試して、一重引用符を閉じますが、機能しません

count=$(sed -n "/$variable/,$p" file.log | grep '"KO"' -c)ERROR予期しない`、'ERROR未 終了のcount=$(sed -n '/'$variable'/,$p' file.log | grep '"KO"' -c)アドレス正規表現

sedreseachが文字の「$variable」であることは知っていますが、値を渡すことができません...

前もって感謝します。

4

2 に答える 2

2

それは引用を正しくすることの問題です。

あなたの最初の例:

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

$variable一重引用符で囲まれているため、展開されません。2番目の例:

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

chorobaが述べたように、拡張$variableしますが、その内容に問題があります。また、シェル変数として解釈される問題もあります。3番目の例:$p

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

必要なものにかなり近づきますが、sedが特別に扱う文字が含まれていると、それでも問題が$variable発生するため、これらをエスケープする必要があります。たとえば、次の作品です。

variable="\[17-09-12 00:01:03\]"
count=$(sed -n '/'$variable'/,$p' file.log

また、角かっこもシェルに固有であるため、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 に答える