0

我有一个这样的文件:

113728482180.18408400639521053213728482180.18534013377161235313728482180.18527849814511801413728482180.12680711716571988513728482180.40802725786530114613728482180.039221670254883746713728482180.42748179436369843813728482180.45107192556631565913728482180.43916947404834661013728482180.12677684033447337

如何在\n匹配的位置之前添加文本(在本例中为 a)11 个字符0.

我想最终得到类似的东西:

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 个字符,在 10000 的情况下会像这样结束:

213728482180.43916947404831000
313728482180.12677684033441000

但目标是获得:

1000213728482180.4391694740483
1000313728482180.1267768403344
4

2 回答 2

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
于 2013-07-03T11:18:37.290 回答
0

将 bash 的 for 循环与 sed 一起使用怎么样?

str="..."
for II in `seq 2 10`; do
  str=`echo $str | sed -e 's#\('$II'13728482180\.\)# \1#'`
done
echo $str | tr ' ' '\n'

如果事先知道,您可以用seq 2 10您自己的数字 N,替换seq 2 N

于 2013-07-03T11:50:51.757 回答