在bash中,如何使用动态替换替换文件中的字符串

时间:2015-03-29 14:09:10

标签: bash awk sed

具体来说,我有一个Markdown文档,其中的数字列为

```
![Figure XXX](images/figure-of-a-thing.png)
...
![Figure XXX](images/figure-of-another-thing.png)
```

我想最终得到以下内容:

```
![Figure 1](images/figure-of-a-thing.png)
...
![Figure 2](images/figure-of-another-thing.png)
```

即,单调递增的数字。我觉得有一些sed / awk忍者可以解决这个问题。

1 个答案:

答案 0 :(得分:2)

我会说

awk '/^!\[Figure/ { sub(/XXX/, ++n) } 1' filename.md

这将替换所有以XXX开头且带有正在运行的计数器的行中![Figure的第一次出现。

如果![Figure序列也可以出现在一行中间,可能会出现在一行中(我不认为这很可能,但为了完整起见,让我们考虑一下),你可以使用

awk 'BEGIN { n = 1 } { while(sub(/!\[Figure XXX/, "![Figure " n)) ++n; } 1' filename.md