假设我有一个名为 的文件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
有点像a
for 文件)。
因此,假设您generate-changelog
写入标准输出,您可以尝试
generate-changelog | sed -i '4r/dev/stdin' CHANGELOG.md