如果我有一个像“name”这样的字符串:“tempname”,“department”:“tempdept”,我想搜索“department”的值,即“tempdept”。因此,如果“部门”存在,我只需要返回的值。搜索的字符串的长度可能很长。这可能使用sed / awk,你能帮忙吗?
我尝试了以下操作,但它返回整个字符串。我在这里寻找部门。
echo $data | sed 's/\(\"department\":\)\(.*\"\)/\2/'
答案 0 :(得分: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'
答案 1 :(得分: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;}