У меня есть один файл, который включает в себя эту строку:
2020-12-21 10:46:49.165 INFO: [41] browser.leaveCallAndQuitBrowser() [2020-12-21T10:46:36+0000] [FINE] DevTools WebSocket Event: Runtime.consoleAPICalled 74D7A734C0BD6EEFA60271821A6A2F55 {
"args": [ {
"type": "string",
"value": "2020-12-21T10:46:36.633Z"
}, {
"type": "string",
"value": "[modules/xmpp/xmpp.js]"
}, {
"type": "string",
"value": "\u003CA.connectionHandler>: "
}, {
"type": "string",
"value": "My Jabber ID: recorder@recorder.mydomain/hjE0dMPL"
} ],
...
Я пытаюсь извлечь эту строку из файла recorder@recorder.mydomain.com/vT1gTnAz
с помощью команды sed
, но мне это не удалось. Может ли кто-нибудь с опытом sed
и regex
помочь или подсказать, как это сделать?
В настоящее время я делаю это с помощью двух команд: я первый получаю «Мой Jabber ID: recorder@recorder.mydomain.com/hjE0dMPL», а затем замените My Jabber ID: пустой строкой.
grep -EiEio '\bMy Jabber ID: (recorder@[A-Z0-9.-]+\.[A-Z]{2,4}.*)\b' browser.0.txt | sed 's/^My Jabber ID: //g'
Хотя было бы элегантнее сделать это одной командой.
Для этого вы должны использовать правильный анализатор json, например jq, но если вы по какой-то причине не можете использовать jq, вы можете использовать sed:
sed -rn 's/(^.*My Jabber ID: )(.*)(".*$)/\2/p' file
Включите регулярные выражения с помощью -r, а затем разделите строку на три части с помощью регулярных выражений, заменив строку только второй частью и распечатав.
Вы можете решить это напрямую с помощью grep. Предположим, ваш контент находится в файле test.txt:
cat test.txt |grep -Po '"value": "My Jabber ID: \K[^"]*'
вернется
recorder@recorder.room-test5.11sight.com/hjE0dMPL