如何以编程方式更改此文本文件
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
也可用于执行编辑。