1. マッチした行の後に追加
1.1. 文字列を追加
sed '/<matchする条件>/a <追加するコンテンツ>' <対象となるファイル>
例:
target.txt
abc
sed '/^abc$/a def' target.txt
abc
def
1.2. ファイルの中身を追加
sed -i '/<matchする条件>/r <追加するコンテンツの入ったファイル>' <対象となるファイル>
例:
target.txt
abc
content_to_add.txt
def
sed '/^abc$/r content_to_add.txt' target.txt
abc
def
2. マッチした行の前に追加
2.1. 文字列を追加
sed '/<matchする条件>/i <追加するコンテンツ>' <対象となるファイル>
例:
target.txt
abc
sed '/^abc$/i def' target.txt
def
abc
2.2. ファイルの中身を追加
sed -i $'/<matchする条件>/{e cat <追加するコンテンツの入ったファイル>\n}' <対象となるファイル>
例:
target.txt
abc
content_to_add.txt
def
sed $'/^abc$/{e cat content_to_add.txt\n}' target.txt
def
abc
3. マッチした行をファイルの中身で置換する
3.1. マッチ条件が一行の場合
sed 's/<matchする条件>/cat <追加するコンテンツの入ったファイル>/e' <対象となるファイル>
例:
target.txt
abc
content_to_add.txt
def
sed 's/abc/cat content_to_add.txt/e' target.txt
def
3.2. 複数行マッチさせる場合
target.txt
func aaa() {
aaa
}
func bbb() {
bbb
}
content.txt
func aaa() {
AAA
}
gsed "/func aaa() {/,/^}/c $(sed 's/$/\\n/' content.txt | tr -d '\n' | sed 's/.\{2\}$//')" target.txt
func aaa() {
AAA
}
func bbb() {
bbb
}
sed 's/$/\\n/' content.txt | tr -d '\n'
は複数行あるものをfunc aaa() {\n AAA\n}\n
に変換する役割
参考
- https://www.gnu.org/software/sed/manual/sed.html#Extended-Commands
- https://www.gnu.org/software/sed/manual/sed.html#sed-commands-summary
- https://stackoverflow.com/questions/31056599/bash-sed-replace-text-with-file-content
- https://fabianlee.org/2018/10/28/linux-using-sed-to-insert-lines-before-or-after-a-match/
- https://stackoverflow.com/questions/5178828/how-to-replace-all-lines-between-two-points-and-subtitute-it-with-some-text-in-s