2013-03-28 2 views
0

Если у меня есть строка типа «name»: «tempname», «department»: «tempdept», я хочу найти значение для «department», которое является «tempdept» ». Поэтому, если существует «отдел», мне нужно только вернуть значение. Длина искомой строки может быть очень длинной. Возможно ли это с помощью sed/awk, можете ли вы помочь?Linux - найти строку и получить следующий раздел

Я пробовал следующее, но он возвращает целую строку. Я ищу здесь отдел.

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

ответ

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;} 
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' 
+0

Спасибо за ответ. Измененное решение sed ниже работает, но результат усекается, когда он попадает в запятую в значение отдела. Итак, полагая, что значение отдела всегда заканчивается двойной цитатой, можем ли мы получить до этого символа, включая цитату? echo "$ data" | tr, \\ n | sed -n '/ "department":/s /// p' –

Смежные вопросы