大家!! 我想从命令的stdout获取特定的子字符串 的标准输出:
{ “响应”: { “ID”: “110200dev1”, “成功”: “真”, “标记”: “09ad7cc7da1db13334281b84f2a8fa54”}, “成功”: “真”}
我需要在没有引号的标记之后得到一个十六进制字符串,十六进制字符串的长度是32个字母。我想它可以通过 sed 或 egrep 来完成。我不想在这里使用 awk 。因为stdout经常被改变。
答案 0 :(得分:4)
grep 的本质是提取事物:
grep -Po '"token":"\K[^"]+'
-P
选项将模式解释为Perl regular expression。-o
选项仅显示与模式匹配的匹配部分。\K
抛弃了与此相匹配的所有内容。或使用sed
...
sed 's/.*"token":"\([^"]*\)".*/\1/'
答案 1 :(得分:4)
当gnu-awk
无效时,这是另一种grep -P
解决方案:
awk -F: '{gsub(/"/, "")} NF==2&&$1=="token"{print $2}' RS='[{},]' <<< "$string"
09ad7cc7da1db13334281b84f2a8fa54
答案 2 :(得分:2)
使用sed:
your-command | sed 's/.*"token":"\([^"]*\)".*/\1/'
答案 3 :(得分:1)
YourStreamOrFile | sed -n 's/.*"token":"\([a-f0-9]\{32\}\)".*/\1/p'
如果没有相应的,不会返回完整的字符串