如何将重复字符放入文本文件中的新行

How can I make repeating characters into a new line in a text file

我有一个与此类似的文本文件(不幸的是,这是提取数据的方式):

asdf,10.vip0,sample_pool1,;;;;;;;;10.server1;;;;;;;;;;11.server2;;;;;;;;;;12.server3;;
asdf,10.vip1,sample_pool2,;;;;;;;;10.server1;;;;;;;;;;11.server2;;;;;;;;;;12.server3;;
asdf,10.vip2,sample_pool3,;;;;;;;;10.server1;;;;;;;;;;11.server2;;;;;;;;;;12.server4;;

有没有我可以用来将其格式化为这样的命令?

asdf,10.vip0,sample_pool1,10.server1
11.server2
12.server3
asdf,10.vip1,sample_pool2,10.server41
11.server42
12.server43
asdf,10.vip2,sample_pool3,10.server31
11.server32
12.server34

也许是这样的?

$ sed 's/;;;\+//; s/;;;\+/\n/g; s/;;$//' file
asdf,10.vip0,sample_pool1,10.server1
11.server2
12.server3
asdf,10.vip1,sample_pool2,10.server1
11.server2
12.server3
asdf,10.vip2,sample_pool3,10.server1
11.server2
12.server4

它删除了第一组重复的分号 s/;;;\+// 然后它用新行替换了所有剩余的组 s/;;;\+/\n/g 最后,去掉了末尾的两个分号 s/;;$//

awk 方法:

awk -F, '{ sub(/,;+/,",",[=10=]); sub(/;+$/,"",[=10=]); gsub(/;{3,}/,"\n",[=10=]) }1' file

输出:

asdf,10.vip0,sample_pool1,10.server1
11.server2
12.server3
asdf,10.vip1,sample_pool2,10.server1
11.server2
12.server3
asdf,10.vip2,sample_pool3,10.server1
11.server2
12.server4