我的文件中有以下单行长行:
#cat file
5LkoVZg0BABCBkD9OieAflA==|list1|true|0|0|0|172661|1.16|186042, 5o0QEZg0BABCA3j9OieAflA==|list2|false|0|0|0|0|0|0, 5F3NnwwoBABC1Dfrsf9xucw==|list3|false|0|0|0|0|0|0, 5FaJmwwoBABC0-frsf9xucw==|...
我想用新行替换逗号字符,因此输出如下所示:
5LkoVZg0BABCBkD9OieAflA==|list1|true|0|0|0|172661|1.16|186042
5o0QEZg0BABCA3j9OieAflA==|list2|false|0|0|0|0|0|
5F3NnwwoBABC1Dfrsf9xucw==|list3|false|0|0|0|0|0|0
5FaJmwwoBABC0-frsf9xucw==|...
更具体地说,逗号位于“5”字符之前,请注意“5”字符之前始终有一个空格。
我可以简单地使用以下命令替换逗号:
#cat file | sed -e $'s/,/\\\n/g'
然而,这还不够好,因为逗号有时也可能位于其他尴尬的位置,如下所示:
#cat file
5LkoVZg0BABCBkD9OieAflA==|list1 , |true|0|0|0|172661|1.16|186042, 5o0QEZg0BABCA3j9OieAflA==...
我更喜欢使用 sed 但其他解决方案也很棒。我已经在互联网上搜索了四个小时,但找不到针对我的确切问题的解决方案。
答案1
sed方法:
cat file
5LkoVZg0BABCBkD9OieAflA==|list1 , |true|0|0|0|172661|1.16|186042, 5o0QEZg0BABCA3j9OieAflA==|list2|false|0|0|0|0|0|0, 5F3NnwwoBABC1Dfrsf9xucw==|list3|false|0|0|0|0|0|0, 5FaJmwwoBABC0-frsf9xucw==|...
sed 's/, \(\S*==\)/\n\1/g' file
输出:
5LkoVZg0BABCBkD9OieAflA==|list1 , |true|0|0|0|172661|1.16|186042
5o0QEZg0BABCA3j9OieAflA==|list2|false|0|0|0|0|0|0
5F3NnwwoBABC1Dfrsf9xucw==|list3|false|0|0|0|0|0|0
5FaJmwwoBABC0-frsf9xucw==|...
\S*==
- 后跟 的非空白字符序列==
,被视为每行的前导序列
答案2
更简单的解决方案tr
如下:
cat file | tr "," "\n"
将在哪里tr
查找逗号,
并用新行替换它\n
输出:
5LkoVZg0BABCBkD9OieAflA==|list1|true|0|0|0|172661|1.16|186042
5o0QEZg0BABCA3j9OieAflA==|list2|false|0|0|0|0|0|0
5F3NnwwoBABC1Dfrsf9xucw==|list3|false|0|0|0|0|0|0
5FaJmwwoBABC0-frsf9xucw==|...
请注意,逗号之前的空格被保留。