在sed或egrep的帮助下获取已定义的子字符串

时间:2014-06-29 17:07:05

标签: regex bash sed

大家!! 我想从命令的stdout获取特定的子字符串 的标准输出:

  

{ “响应”:   { “ID”: “110200dev1”, “成功”: “真”, “标记”: “09ad7cc7da1db13334281b84f2a8fa54”}, “成功”: “真”}

我需要在没有引号的标记之后得到一个十六进制字符串,十六进制字符串的长度是32个字母。我想它可以通过 sed egrep 来完成。我不想在这里使用 awk 。因为stdout经常被改变。

4 个答案:

答案 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'
如果没有相应的

不会返回完整的字符串