Linux - 查找字符串并获取下一部分

时间:2013-03-28 17:58:26

标签: linux sed awk

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

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

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

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;}