Como posso adicionar uma quebra de linha antes de um conjunto de valores entrar em um script bash?

2

Eu tenho um conjunto de dados em um script bash. Veja um exemplo de como esses dados se parecem:

"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,

Eu quero adicionar um caractere de quebra de linha (\ n) para preceder "foo1". Em outras palavras, altere os dados para ler:

    \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,

Eu pensei que seria possível fazer com sed / awk, mas não tenho tanta certeza quanto os valores de foo1 podem mudar.

Alguma ideia?

    
por Mike B 19.08.2012 / 18:07

2 respostas

1

Isso adicionará um '\ n' para cada linha que começa com "foo":

sed 's/^"foo1":/\n&/'
    
por 19.08.2012 / 18:28
1

awk solutions:

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

Desde que você disse:

I want to add a line break character (\n) to precede "foo1"

Então, escapei da barra invertida para inserir um caractere \n em vez de uma nova linha.

    
por 20.08.2012 / 07:06