![如何在某个字符(在本例中为逗号)后添加恰好三个字符的换行符(在文本文件的每一行中)?](https://linux22.com/image/97537/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%9F%90%E4%B8%AA%E5%AD%97%E7%AC%A6%EF%BC%88%E5%9C%A8%E6%9C%AC%E4%BE%8B%E4%B8%AD%E4%B8%BA%E9%80%97%E5%8F%B7%EF%BC%89%E5%90%8E%E6%B7%BB%E5%8A%A0%E6%81%B0%E5%A5%BD%E4%B8%89%E4%B8%AA%E5%AD%97%E7%AC%A6%E7%9A%84%E6%8D%A2%E8%A1%8C%E7%AC%A6%EF%BC%88%E5%9C%A8%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E7%9A%84%E6%AF%8F%E4%B8%80%E8%A1%8C%E4%B8%AD%EF%BC%89%EF%BC%9F.png)
我有一个包含国家、城市和州信息以及其他信息的文件。文件的内容如下所示:(仅与所显示问题相关的部分)
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