Найти первую строку и найти немедленную вторую строку и записать версию - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть файл xyz.txt, и я хочу найти первую строку поиска и непосредственное вхождение второй строки, остановиться на этом и извлечь из нее версию с помощью sed.

xyz.txt

    "com.abc.def:ghi": {
        "sometext1": [
            "blah bla1",
            "blah bla2",
            "blah bla3"
        ],
        "string1": "1.1.xyz"
    },
    "**first.string.def:ghi.jkl**": {
        "sometext2": [
            "blah bla4",
            "blah bla5",
            "blah bla6"
        ],
        "**string1**": "**1.2.3.4**"
    },
    "com.zbc.def:ghi.jklm": {
        "sometext3": [
            "blah bla9",
            "blah bla10",
            "blah bla11"
        ],
        "string1": "5.6.7.9"
    },
    "com.mbc.def:ghi.jkn": {
        "sometext4": [
            "blah bla1",
            "blah bla2",
            "blah bla3"
        ],
        "string1": "10.1.23"
    },


   ..... so on 

Я хочу захватить версию, которая встречается с первой строкой (first.string.def: ghi.jkl) и второй строкой (string1) и должна предоставить мне номер версии, такой как 1.2.3.4

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Вы можете попробовать этот сед

sed '/first.string.def:ghi.jkl/,/string1/!d
/string1/!d
s///
s/[^0-9]*\([0-9.]*\).*/\1/
' infile
0 голосов
/ 30 апреля 2018

это можно сделать с помощью GNU grep с параметрами -z строка данных заканчивается 0 байтами, -P PCRE, -o только совпадение.

grep -zPo '\Q"first.string.def:ghi.jkl"\E[^}]*\Q"string1":\E\s+"\K[^"]*' 

регулярное выражение может быть улучшено в зависимости от фактической структуры

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...