如何在每个哈希符号后添加从 141 开始的序列号?

如何在每个哈希符号后添加从 141 开始的序列号?

如何以编程方式更改此文本文件

put returns between paragraphs#
20170218
for linebreak add 2 spaces at end# blah
_italic_ or **bold**#
20170219
20170220#
201702#21

使用 sed 之类的工具来解决这个问题?

put returns between paragraphs#141
20170218
for linebreak add 2 spaces at end#142 blah
_italic_ or **bold**#143
20170219
20170220#144
201702#14521

答案1

虽然 sed 在技术上是可行的(它是图灵完备的),但它非常困难,因为 sed 没有算术。这是 awk 的工作。

如果您只想替换#每行的第一行,只需告诉它替换#后跟#一个递增的数字即可。 awk 自动将整数转换为字符串中的十进制表示法。

awk -v n=141 '/#/ {sub(/#/, "#" (++n))}'

如果要替换每个#字符,最简单的方法是制作#字段分隔符并在除第一个字段之外的每个字段的开头添加数字:

awk -v n=141 -F '#' '{for (i=2; i<=NF; i++) $i = (++n) $i}'

答案2

< yourfile perl -slpe 's/#/$&.$k++/e' -- -k=141

也可用于执行编辑。

相关内容