Назад | Перейти на главную страницу

Как добавить разрыв строки перед набором значений, входящим в сценарий bash?

У меня есть набор данных в сценарий bash. Вот пример того, как выглядят эти данные:

"foo1": "Miscellaneous text",
    "foo2": "More text",
    "foo3": "blah blah blah",
      "foo4": 1635.0,
      "foo5": 0.0,
"foo1": "Miscellaneous text that is different",
    "foo2": "More text1231231",
    "foo3": "blah blah blah234234",
      "foo4": 1633425.0,
      "foo5": 0.0,
"foo1": "Miscellaneous text abc123",
    "foo2": "More text122121",
    "foo3": "blah blah blah414124",
      "foo4": 163235.0,
      "foo5": 1.0,
"foo1": "More Miscellaneous text",
    "foo2": "asdfasdfaMore text",
    "foo3": "blah blahadsfasdf blah",
      "foo4": 1635232.0,
      "foo5": 0.0,

Я хочу добавить символ разрыва строки (\ n) перед "foo1". Другими словами, измените данные на чтение:

    \n"foo1": "Miscellaneous text",
        "foo2": "More text",
        "foo3": "blah blah blah",
          "foo4": 1635.0,
          "foo5": 0.0,
    \n"foo1": "Miscellaneous text that is different",
        "foo2": "More text1231231",
        "foo3": "blah blah blah234234",
          "foo4": 1633425.0,
          "foo5": 0.0,
    \n"foo1": "Miscellaneous text abc123",
        "foo2": "More text122121",
        "foo3": "blah blah blah414124",
          "foo4": 163235.0,
          "foo5": 1.0,
    \n"foo1": "More Miscellaneous text",
        "foo2": "asdfasdfaMore text",
        "foo3": "blah blahadsfasdf blah",
          "foo4": 1635232.0,
          "foo5": 0.0,

Я думал, что это можно сделать с помощью sed / awk, но я не уверен, что значения для foo1 могут / измениться.

Любые идеи?

awk решения:

$ awk '{ sub(/^"foo1"/, "\\n&") }; 1'
$ awk '{ if (/^"foo1"/) { print "\\n" $0 } else { print $0 } }'

Поскольку вы сказали:

Я хочу добавить символ разрыва строки (\ n) перед "foo1"

Поэтому я избежал обратной косой черты, чтобы вставить \n символ вместо новой строки.

Это добавит '\ n' для каждой строки, начинающейся с "foo":

sed 's/^"foo1":/\n&/'