Como posso adicionar uma nova linha (em cada linha de um arquivo de texto) exatamente três caracteres após um determinado caractere (vírgula neste caso)?

Como posso adicionar uma nova linha (em cada linha de um arquivo de texto) exatamente três caracteres após um determinado caractere (vírgula neste caso)?

Tenho um arquivo com informações de país, cidade e estado, entre outras informações. O conteúdo do arquivo é mais ou menos assim: (apenas a parte referente à pergunta mostrada)

Some lines (rows) of text
...
United States
Memphis, TN 38116-3252
...
More lines of text
...
United States
Austin, TX 78726
...

O que eu gostaria de fazer é adicionar uma nova linha antes do CEP ou depois de TN (por exemplo) e também substituir ',' por uma nova linha. Mas presumo que a segunda parte será mais fácil.

Formato desejado:

Some lines (rows) of text
...
United States
Memphis
TN
38116-3252
...
More lines of text
...
United States
Austin
TX
78726
...

O objetivo final é importar os dados para uma planilha como:

Some info | Country | State | City | Etc.
abc       | United..| Texas | Austi| zcx

Estou aberto para qualquer coisa que funcione sed, awk, etc.

Responder1

Eu usaria sedpara isso:

sed -E 's/, /\n/;s/([A-Z]{2}) /\1\n/' States  
Some lines (rows) of text
...
United States
Memphis
TN
38116-3252
...
More lines of text
...
United States
Austin
TX
78726

A primeira expressão s/, /\n/procura uma vírgula seguida de um espaço e substitui por nova linha.

A segunda expressão s/([A-Z]{2}) /\1\n/procura quaisquer duas letras maiúsculas seguidas de um espaço e as substitui por essas letras seguidas de uma nova linha.


sed --version
sed (GNU sed) 4.2.2

informação relacionada