Как добавить новую строку (в каждой строке текстового файла) ровно через три символа после определенного символа (в данном случае запятой)?

Как добавить новую строку (в каждой строке текстового файла) ровно через три символа после определенного символа (в данном случае запятой)?

У меня есть файл с информацией о стране, городе и штате, среди прочего. Содержимое файла выглядит примерно так: (показана только часть, относящаяся к вопросу)

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

Я бы хотел добавить новую строку перед почтовым индексом или после TN (например), а также заменить ',' на новую строку. Но я предполагаю, что вторая часть будет проще.

Желаемый формат:

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

Конечной целью является импорт данных в электронную таблицу, например:

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

Я открыт для всего, что работает с sed, awk и т. д.

решение1

Я бы использовал sedдля этого:

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

Первое выражение s/, /\n/ищет запятую, за которой следует пробел, и заменяет ее на новую строку.

Второе выражение s/([A-Z]{2}) /\1\n/ищет любые две заглавные буквы, за которыми следует пробел, и заменяет их этими буквами, за которыми следует новая строка.


sed --version
sed (GNU sed) 4.2.2

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