Как извлечь данные после поля в файле

Как извлечь данные после поля в файле

У меня есть следующий текст в файле

 "rules": [
        "/Common/Tetration_TCP_L4_ipfix",
        "/Common/_sys_https_redirect"
    ],
    "rulesReference": [
        {
            "link": "https://localhost/mgmt/tm/ltm/rule/~Common~Tetration_TCP_L4_ipfix?ver=12.0.0"
        }

хотите извлечь что-нибудь внутри "rules": [] в настоящее время это

/Common/Tetration_TCP_L4_ipfix
/Common/_sys_https_redirect

Вывод должен выглядеть так:

Tetration_TCP_L4_ipfix
_sys_https_redirect

но опять же это может быть что угодно.

решение1

Если ваш входной файл содержит не полноценный JSON, а только внутренний фрагмент (хотя и структурно корректный), вы можете восстановить недостающие «внешние» части, чтобы получить полную корректную структуру JSON.

sed+jqрешение:

jq -r '.rules[] | sub("/Common/"; "")' <(sed '1 s/^/{/; $ s/$/]}/' file)

Выход:

Tetration_TCP_L4_ipfix
_sys_https_redirect

Конечно, если у вас действительно есть корректный JSON - просто пропустите sedобработку и просто используйте:

jq -r '.rules[] | sub("/Common/"; "")' file

решение2

Если это правильно сформированный JSON-файл:

$ jq -r '..|select(type=="object" and has("rules")).rules|map(split("/")|.[-1])|.[]' file.json
Tetration_TCP_L4_ipfix
_sys_https_redirect

Это будет использоваться jqдля рекурсивного поиска всех объектов JSON, имеющих rulesключ. Для всех значений массива этих ключей он разделит значение /и вернет последний его компонент.

решение3

С использованиемАВК:

awk -F '[/"]' '/"rules": /,/],/{if(/"rules": |],/) next; print $(NF-1)}' file.txt

Связанный контент