【发布时间】:2016-08-18 08:51:40
【问题描述】:
我正在尝试对以下行进行替换:
1AA20160817BBBBBDIGITS1NUMBER1STYLE59 00002200000220
1AA20160817BBBBBDIGITS2NUMBER1STYLE60 00000000000220
1AA20160817DDDDDDIGITS3NUMBER2STYLE60 00000000000486
1AA20160817DDDDDDIGITS4NUMBER2STYLE59 00004860000486
1AA20160817FFFFFDIGITS5NUMBER3STYLE602523111100000000000000
1AA20160817FFFFFDIGITS6NUMBER3STYLE59 00000820000000
我希望最终的输出是这样的:
1AA20160817BBBBBDIGITS1NUMBER1STYLE59 00002200000220
1AA20160817BBBBBDIGITS1NUMBER1STYLE60 00000000000220
1AA20160817DDDDDDIGITS3NUMBER2STYLE60 00000000000486
1AA20160817DDDDDDIGITS3NUMBER2STYLE59 00004860000486
1AA20160817FFFFFDIGITS5NUMBER3STYLE602523111100000000000000
1AA20160817FFFFFDIGITS5NUMBER3STYLE59 00000820000000
变化是一位数字,就在每两行的“数字”之前。 BBBBB/DDDDD 样式中的模式是时间,最后一个字符是秒指示符。
我希望它检查特定数量的字符并在那里执行更改,我已经编写了 sed 来执行该任务等:
sed -i.bak "s/^\(.\{1\}\)$scenario$datein\(.\{6\}\)$pod/1$scenario$datein$timein$pod/g" $1
其余代码在 Perl 中。你们中的哪一个可以帮我在 Perl 中做同样的替换吗?或者也许告诉我如何从 perl 代码运行这个 sed 命令?我的问题是有问题的文件很大,而 bash 读取每一行并执行替换需要很长时间。提前致谢。
【问题讨论】:
-
第一个块和第二个块有什么区别?在我看来,它们看起来一样
-
哦,很好,不只是我...... :)
-
每隔一个块有 1 个不同的字符,就在“数字”之前
-
将其添加到正文中,以免混淆。
-
提供易于追踪的minimal reproducible example 总是好的。在这里,
....CNUMBER...和...BNUMBER...看起来非常相似。能不能把例子简化一下,让大家更容易回答,基本理解你的最终目标?