Меня немного отличает разница между «нормальным» RegEx и синтаксисом, который понимает grep. Я хотел бы попросить вас о помощи в следующем.Некоторая помощь в grep regex
У меня есть этот текст в файле «deployments.txt»:
{"data":[{"id":"local$1cb66e07-2e75-40c4-9ea7-cdda2e62a7e9","name":"some-other-app","servers":["f150ee04-6250-4b97-a2d7-f6511186b6b4"],"applications":["local$1552a8d2-4c9d-4256-b635-a15c4187f4ee"],"lastModified":"Mon, 14 Sep 2015 11:34:52.474 CEST","reconciled":false,"status":"DEPLOYED","href":"https://host123:7777/mmc-3.6.1/api/deployments/local$1cb66e07-2e75-40c4-9ea7-cdda2e62a7e9","clusterIds":[],"clusterNames":[]},{"id":"local$6b5fabb5-3e7e-4d16-9664-14977e3b1a7b","name":"interesting-app","servers":["f150ee04-6250-4b97-a2d7-f6511186b6b4"],"applications":["local$87bc69d6-1b92-4e3a-a0f2-724c5d37aeaf"],"lastModified":"Mon, 14 Sep 2015 22:43:15.440 CEST","reconciled":false,"status":"DEPLOYED","href":"https://host123:7777/mmc-3.6.1/api/deployments/local$6b5fabb5-3e7e-4d16-9664-14977e3b1a7b","clusterIds":[],"clusterNames":[]}],"total":2}
А теперь я заинтересован в этом немного:
"id":"local$6b5fabb5-3e7e-4d16-9664-14977e3b1a7b","name":"interesting-app"
или на самом деле только чистый идентификатор, предшествующего текст "name":"interesting-app"
А «нормальный» регулярное выражение будет: .*"id":"(.*?)","name":"interesting-app"
, который дает в группе захвата local$6b5fabb5-3e7e-4d16-9664-14977e3b1a7b
Но эти группы захвата работают по-разному в grep, по-видимому, догадались, что к настоящему моменту и стучали головой об этом.
Так что я получил это для Grep Сейчас:
grep -Po '(?<="id":").*?(?=","name":"interesting-app)' deployments.txt
Но это захватывает слишком много, начните с первого "id":"
он находит, а затем останавливается, когда он находит ","name":"interesting-app
.
Итак, как я могу получить результат, который я хочу здесь? Я хочу, чтобы чистое значение id сразу предшествовало "name":"interesting-app"
.
Любая помощь очень ценится!
Нет, не разбирайте 'json' с регулярным выражением. Общий формат json не обрабатывается регулярным выражением, и, кроме того, для большинства случаев, которые могут быть проанализированы, будет исключительно подвержен ошибкам. –
Я понимаю и в основном соглашаюсь с вашим заявлением, но тогда как бы вы посоветовали переварить это в сценарии bash? К сожалению, у меня нет ресурсов для создания приложения с возможностями json parsing. – Denno
Вы можете использовать 'jq'? –