我有一个这样的文件:
113728482180.18408400639521053213728482180.18534013377161235313728482180.18527849814511801413728482180.12680711716571988513728482180.40802725786530114613728482180.039221670254883746713728482180.42748179436369843813728482180.45107192556631565913728482180.43916947404834661013728482180.12677684033447337
如何在匹配\n
的位置之前添加文字(在本例中为0.
)11个字符?
我想最终得到类似的东西:
113728482180.18408400639521053
213728482180.18534013377161235
313728482180.18527849814511801
413728482180.12680711716571988
513728482180.40802725786530114
613728482180.039221670254883746
713728482180.42748179436369843
813728482180.45107192556631565
913728482180.43916947404834661
013728482180.12677684033447337
我有可能,我还想解决以下问题。每行的第一个数字是计数器(1,2,3,...,10,...,10000,......)。第9行的最后一位(也就是1)也应该包含在第10行中,以便该行以10开始,而不是0.这对于1000s,10000s和100000s也是必要的。
有可能吗?对于第1-9行,偏移量为11,对于第10-99行,偏移量为12,对于行100-999,偏移量为13,依此类推。
对于上面的示例,最后两行将成为:
913728482180.4391694740483466
1013728482180.12677684033447337
计数器是顺序的。对于较大的数字,大约数百和数千,只需在匹配之前添加换行符11个字符就像10000s那样结束:
213728482180.43916947404831000
313728482180.12677684033441000
但目的是获得:
1000213728482180.4391694740483
1000313728482180.1267768403344
答案 0 :(得分:4)
试试这个:( gnu sed)
sed -r 's/([^.]{12}\.)/\n\1/2g' file
示例:
kent$ sed -r 's/([^.]{12}\.)/\n\1/2g' a
113728482180.18408400639521053
213728482180.18534013377161235
313728482180.18527849814511801
413728482180.12680711716571988
513728482180.40802725786530114
613728482180.039221670254883746
713728482180.42748179436369843
813728482180.45107192556631565
913728482180.43916947404834661
013728482180.12677684033447337
答案 1 :(得分:0)
如何在sed中使用bash的for循环?
str="..."
for II in `seq 2 10`; do
str=`echo $str | sed -e 's#\('$II'13728482180\.\)# \1#'`
done
echo $str | tr ' ' '\n'
如果事先知道,您可以用自己的号码N seq 2 10
替换seq 2 N