私のファイルデータパターンは次のとおりです。変数値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
- 一重引用符内のすべての内容は次のとおりです。
$i
はドル記号の後ろにi
。変数を使用するには、次のように文字列を二重引用符で囲む必要があります。"s/.*$iRX:\([0-9]\+\).*/\1/g"
- ただし、これはという変数を見つけるためには機能しません
iRX
。この問題を解決する最も簡単な方法は、次のように変数名を中括弧に入れることです。"s/.*${i}RX:\([0-9]\+\).*/\1/g"
$EMSTATE
二重引用符も入れる必要があります。"$EMSTATE"/packetdrop.txt
または"$EMSTATE/packetdrop.txt"
どちらかを使用できます。
答え2
一重引用符内では変数の拡張は行われません。代わりに二重引用符を使用してください。結果を変数に設定するには、sed
コマンド代替構文で実行する必要があり、$(...)
可能であれば引用符を付ける必要があります"$(...)"
。また、$iRX
有効な変数名にすることができますが、この方法が最適です${i}
。
rxfile="$(sed "s/.*${i}RX:\([0-9]\+\).*/\1/g" "$EMSTATE/packetdrop.txt" )"