0

如果我有一个像“name”:“tempname”,“department”:“tempdept”这样的字符串,我想搜索“department”的值,即“tempdept”。所以如果“部门”存在,我只需要返回的值。搜索的字符串的长度可能很长。这可以使用 sed/awk,你能帮忙吗?

我尝试了以下方法,但它返回了整个字符串。我在这里寻找部门。

echo $data | sed 's/\(\"department\":\)\(.*\"\)/\2/'
4

2 回答 2

1

一些简单的解决方案:

echo "$data" | tr , \\n | awk -F: '$1 ~ /^department$/{ print $2 }'

或者

echo "$data" | awk -F: '$1 ~ /^department$/{ print $2 }' RS=,

您的解决方案只需要稍作修改:

echo "$data" | tr , \\n | sed -n 's/"department":\(.*\)/\2/p'

或者

echo "$data" | tr , \\n | sed -n '/"department":/s///p'
于 2013-03-28T18:00:39.683 回答
0

看看这是否适合你:

sed -ne '/"department"/{s/^.*"department":"\([^"]*\).*/\1/;p;}'

例子:

echo '"name":"tempname","department":"tempdept"' | sed -ne '/"department"/{s/^.*"department":"\([^"]*\).*/\1/;p;}'
tempdept

如果您需要保留双引号,只需在替换期间将它们重新添加:

    sed -ne '/"department"/{s/^.*"department":"\([^"]*\).*/"\1"/;p;}
于 2013-03-28T21:11:39.213 回答