如何解决在文本的特定位置插入“,”
(我输入了准确的文本和执行的命令,因此看起来有些混乱。)
我有一个看起来像.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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。