Wie kann ich (in jeder Zeile einer Textdatei) genau drei Zeichen nach einem bestimmten Zeichen (in diesem Fall ein Komma) eine neue Zeile hinzufügen?

Wie kann ich (in jeder Zeile einer Textdatei) genau drei Zeichen nach einem bestimmten Zeichen (in diesem Fall ein Komma) eine neue Zeile hinzufügen?

Ich habe eine Datei mit Informationen zu Land, Stadt und Staat sowie anderen Informationen. Der Inhalt der Datei sieht ungefähr so ​​aus: (nur der Teil, der sich auf die angezeigte Frage bezieht)

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

Ich möchte beispielsweise vor der Postleitzahl oder nach TN eine neue Zeile einfügen und auch das ',' durch eine neue Zeile ersetzen. Aber ich gehe davon aus, dass der zweite Teil einfacher sein wird.

Gewünschtes Format:

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

Das Endziel besteht darin, die Daten in eine Tabelle wie diese zu importieren:

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

Ich bin offen für alles, was mit sed, awk usw. funktioniert.

Antwort1

Ich würde sedhierfür verwenden:

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

Der erste Ausdruck s/, /\n/sucht nach einem Komma, gefolgt von einem Leerzeichen, und ersetzt es durch eine neue Zeile.

Der zweite Ausdruck s/([A-Z]{2}) /\1\n/sucht nach zwei beliebigen Großbuchstaben, gefolgt von einem Leerzeichen, und ersetzt diese durch diese Buchstaben, gefolgt von einem Zeilenumbruch.


sed --version
sed (GNU sed) 4.2.2

verwandte Informationen