0

"name":"tempname","department":"tempdept" のような文字列がある場合、"tempdept" である "department" の値を検索します。したがって、「部門」が存在する場合は、返された値だけが必要です。検索される文字列の長さは非常に長くなる可能性があります。これは 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 に答える