我需要更改的文件

我需要更改的文件

假设我有一个名为 的文件CHANGELOG.md,并且我想要插入第 4 行命令的输出generate-changelog。如何使用诸如 之类的 shell 命令来实现此目的sed

我需要更改的文件

$ cat CHANGELOG.md
# Change Log
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).

# 3.0.0

我的命令

$ generate-changelog
# 3.0.1
- fixed some bug
- lots and lots 
- of multiline
- output

我想获得的结果(不是在标准输出上,而是CHANGELOG.md直接在)

# Change Log
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).

# 3.0.1
- fixed some bug
- lots and lots 
- of multiline
- output

# 3.0.0

基本上,我需要基于标准输入创建这个静态命令(我需要能够插入任意内容,由第 4 行的命令提供):

sed -i "4a\
    ## [$newTag](https://github.com/$(repo_path)/compare/$(latest_tag)...$newTag) - $(today)" CHANGELOG.md

答案1

至少使用 GNU sed,您可以使用r具有特殊文件名的命令/dev/stdin来读取标准输入的内容并将其排队,以便在循环末尾插入(r有点像afor 文件)。

因此,假设您generate-changelog写入标准输出,您可以尝试

generate-changelog | sed -i '4r/dev/stdin' CHANGELOG.md

答案2

像这样与

awk 'NR==4{system("generate-changelog")}1' file

您需要带有 IO 重定向的临时文件才能正常工作。

相关内容