1

私は sed を使用してパターン マッチングを行い、一部の入力からビットとピースを抽出しています。これらのキャプチャされたグループをインデックスとして使用して、辞書内の要素にアクセスしたいと考えています。

たとえば、次のコードが必要です。

TASK_TO_IP["task1"]=127.0.0.1
echo "sent task1 to slave" | sed -rn "s/sent ([[:graph:]]+) .*/Found ${TASK_TO_IP[\1]}/p"

出力する:Found 127.0.0.1

代わりに私は得ています:Found

sed のキャプチャされたグループをこの辞書のキーとして使用するにはどうすればよいですか?

4

2 に答える 2

3

パラメータ展開は、sed が呼び出される前に発生します。次のようなことをする必要があります (未テスト):

output=$(
  echo "sent task1 to slave" | 
  sed -rn 's/sent ([[:graph:]]+) .*/Found ${TASK_TO_IP[\1]}/p'
)
eval echo "$output"

私は別のアプローチを取ります: 最初に文字列からタスク ID を抽出し、それをハッシュ ルックアップに使用します。

line="sent task1 to slave"
taskid=$( grep -oP 'sent \K\w+' <<< "$line" )
echo "Found ${TASK_TO_IP[$taskid]}"
于 2013-11-08T14:36:29.573 に答える
2

ここではラッパー スクリプトを使用します。sedそれを取得task1して変数に格納するために使用します。

var="$(sed 's/sent \([^ ]*\).*/\1/' <<< 'sent task1 to slave')"

その後

echo "${TASK_TO_IP[$var]}"
于 2013-11-08T14:34:47.207 に答える