Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中,如何用动态替换替换文件中的字符串_Bash_Awk_Sed - Fatal编程技术网

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

在bash中,如何用动态替换替换文件中的字符串,bash,awk,sed,Bash,Awk,Sed,具体地说,我有一个降价文档,其中列出了如下数据 ``` ![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) ``` 即,具有

具体地说,我有一个降价文档,其中列出了如下数据

```
![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忍者可以解决这个问题。

我想说

awk '/^!\[Figure/ { sub(/XXX/, ++n) } 1' filename.md
这将替换以
开头的所有行中第一次出现的
XXX
![图
带有运行计数器

如果<代码>![图< /代码>序列也可以出现在一行中,也可能在一行中出现几次(我不认为这是可能的,但是为了完整性,让我们考虑一下这个例子),您可以使用

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

太棒了。我不得不做一个小小的改变,但是在钱上:`` awk'BEGIN{n=1}{if(sub(/XXX/,n)){++n;}}``啊,好吧。如果不担心误报,那当然更简单。如果你愿意的话,你可以把它进一步缩减到
awk'BEGIN{n=1}sub(/XXX/,n){n}1'