在文本的特定位置插入“,”

问题描述

(我输入了准确的文本和执行的命令,因此看起来有些混乱。)

我有一个看起来像.TXT的文件

11111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111

我想要的结果会是

11111111111111,1111111,11,1,111,1111111111111,11111111,1111111111111111,111
11111111111111,111

我尝试过的命令是

sed -i 's/\(.\{14\}\)\(.\{7\}\)\(.\{2\}\)\(.\{1\}\)\(.\{3\}\)\(.\{13\}\)\(.\{1\}\)\(.\{8\}\)\(.\{16\}\)\(.\{3\}\)/\1,\2,\3,\4,\5,\6,\7,\8,\9,\10,/' SOME.TXT

我得到的结果是

11111111111111,1111111111111110,111

我真的不知道为什么这些0突然弹出,并且即使在中途工作时,','也不会出现在我命令的位置。

这是bug还是sed命令中的某些东西?

解决方法

它正在输出0,因为sed捕获组及其后向引用最多只能有9个,并且\10被解释为\1,后跟文字{ {1}}。

您可以使用https://leanpub.com/effectivekotlin轻松解决它:

0
awk -v OFS=,'BEGIN { FIELDWIDTHS = "14 7 2 1 3 13 1 8 16 3 *" } {$1 = $1} 1' file

仅出于学术练习,这里有一个工作的11111111111111,1111111,11,1,111,1111111111111,11111111,1111111111111111,111 11111111111111,111 使用2种替代方法来解决此问题:

sed
,

sed无法引用捕获组> 9,Perl可以:

perl -i -pe  's/(.{14})(.{7})(.{2})(.)(.{3})(.{13})(.)(.{8})(.{16})(.{3})/$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,/' SOME.TXT
,

如果您坚持使用sed,则可以执行以下操作:

sed 's/./&,/68;s/./&,/65;s/./&,/49;s/./&,/41;s/./&,/40;s/./&,/27;s/./&,/24;s/./&,/23;s/./&,/21;s/./&,/14' test.txt
11111111111111,111

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...