変更するファイル

変更するファイル

CHANGELOG.md欲しいファイルがあるとしましょう。入れる4行のコマンド出力ですgenerate-changelog。次のシェルコマンドを使用してこれを達成するにはどうすればよいですか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

私が得たい結果(stdoutではなく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標準入力の内容を読み取り、ループの末尾に挿入するためにキューに入れることができます(forファイルとr少し似ています)。a

したがって、generate-changelogstdoutに書き込むと仮定すると、試してみることができます。

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

答え2

このように:

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

これを正しく機能させるには、IOリダイレクトを含む一時ファイルが必要です。

関連情報