我使用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组用作此词典的关键?
答案 0 :(得分: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]}"
答案 1 :(得分:2)
我在这里使用包装器脚本。使用sed
获取task1
并将其存储在变量中。
var="$(sed 's/sent \([^ ]*\).*/\1/' <<< 'sent task1 to slave')"
然后
echo "${TASK_TO_IP[$var]}"