Sedコマンドは正規表現にハードコードされた値で実行されますが、スクリプト内の変数のため失敗します。

Sedコマンドは正規表現にハードコードされた値で実行されますが、スクリプト内の変数のため失敗します。

私のファイルデータパターンは次のとおりです。変数値eth0とeth1に基づいて6または3、8または4を出力する必要があります。

eth0RX:6:eth0TX:3|eth1RX:8:eth1TX:4|

以下のコードは正常に実行されます。

sed 's/.*eth0RX:\([0-9]\+\).*/\1/g' $EMSTATE/packetdrop.txt

しかし、以下のように動的変数を使用すると失敗します。

rxfile=sed 's/.*$iRX:\([0-9]\+\).*/\1/g' $EMSTATE/packetdrop.txt

ベストアンサー1

  1. 一重引用符内のすべての内容は次のとおりです。  $iはドル記号の後ろにi。変数を使用するには、次のように文字列を二重引用符で囲む必要があります。
    "s/.*$iRX:\([0-9]\+\).*/\1/g"
  2. ただし、これはという変数を見つけるためには機能しませんiRX。この問題を解決する最も簡単な方法は、次のように変数名を中括弧に入れることです。
    "s/.*${i}RX:\([0-9]\+\).*/\1/g"
  3. $EMSTATE二重引用符も入れる必要があります。"$EMSTATE"/packetdrop.txtまたは"$EMSTATE/packetdrop.txt"どちらかを使用できます。

おすすめ記事