以下sed
行适用于以下字符串。我的目标是将存储在值内的数据转换为变量。
<input type="hidden" name="form_token" id="edit-system-site-maintenance-settings-form-token" value="0f5ae5a6e8bb84d3e18b30b7ff2a46b2" />
| sed 's/^.* value="//' \
| sed 's/ \/>//' \
| sed 's/"//'
但我认为最后一行是浪费。我不明白为什么当我尝试在单行上执行它时,如下所示,它不匹配。
| sed 's/" \/>//'
第一个sed行字符串处于以下状态后,仅供参考
483deac360aa1d0ea89cedbdcc4d051e" />
答案 0 :(得分:2)
一些迂腐的笔记。不需要三sed
次幂,你可以通过grep
获得你想要的东西,并且可以看到正面表达式的前瞻和后视。
$> cat ./text
<input type="hidden" name="form_token" id="edit-system-site-maintenance-settings-form-token" value="0f5ae5a6e8bb84d3e18b30b7ff2a46b2" />
$> grep -P -o "(?<=value=\")([a-f0-9]*)(?=\")" ./text
0f5ae5a6e8bb84d3e18b30b7ff2a46b2
答案 1 :(得分:0)
它在我的系统上工作正常,但你可能会逃脱:
sed -e 's?^.* value="??' -e 's?".*$??'
如本抄本所示:
pax> echo '<input type="hidden" name="form_token" id="edit-system-site-maintenance-settings-form-token" value="0f5ae5a6e8bb84d3e18b30b7ff2a46b2" />' | sed -e 's?^.* value="??' -e 's?".*$??'
0f5ae5a6e8bb84d3e18b30b7ff2a46b2
GNU sed
可以使用其他分隔符,这可以最大限度地减少您在sed
命令中经常发现的曲折,例如\/\/\/\/\/
。
此外,您只需要调用{em>一个的sed
副本,并在每一行上运行多个命令。
第二个命令应足以剥离超出值的所有内容,尤其是在更复杂的内容中:
<input type="hidden" name="xyzzy" value="plugh" something="else" />
如果您希望使用sed
等文本处理工具来处理XML,那就是这样。使用适当的工具有更多“可靠”的方法,但我假设你可以控制你的XML格式到sed
可以处理它。
答案 2 :(得分:0)
这可能对您有用:
a='<input type="hidden" name="form_token" id="edit-system-site-maintenance-settings-form-token" value="0f5ae5a6e8bb84d3e18b30b7ff2a46b2" />'
b=$(sed 's/.*value="\("[^"]*\).*/\1/' <<<$a)
echo $b
0f5ae5a6e8bb84d3e18b30b7ff2a46b2
说明:
a
b
<<<$a
\1
,其中包含值value