
~/.ssh/config にコンテンツブロックがあります。 「#BEGIN AUTO GENERATED CONTENT」行で始まり、「#END AUTO GENERATED CONTENT」行で終わります。
これらの2行間の内容を置き換えるコマンドがあります。内容は「config」というファイルから読み込まれます。
sed -i -ne '/# BEGIN AUTO GENERATED CONTENT/ {p; r config' -e ':a; n; /# END AUTO GENERATED CONTENT/ {p; b}; ba}; p' ~/.ssh/config
Ubuntuではうまく動作しますが、bsd sedを使用するMacでは動作しません。次のエラーメッセージが表示されます。
sed: 1: "/# BEGIN AUTO GENERATED ...": unexpected EOF (pending }'s)
bsdで動作するには、このコマンドを変更する必要があります。 Macではgsedを使用しないでください
答え1
まず、Macを使用しているため、個々の-i
オプションは機能しません。あなたの場合はnullの場合は値を指定する必要があります。
第二に、スイッチはすでに適用されているので、状況に応じてp;b
ペアを変更できます。以前のバージョンでは、ブランチコマンドは閉じた中括弧とうまく機能しませんでした。p;d
-n
b
seds
$ sed -i '' -ne '/# BEGIN AUTO GENERATED CONTENT/{' -e 'p;r config' -e ':a;n' -e '/# END AUTO GENERATED CONTENT/{' -e 'p;d' -e '}' -e 'ba' -e '}' -e 'p' ~/.ssh/config
これが使用して廃棄されていない場合は、ファイルに書き換えて次のように呼び出すことをお勧めします。
$ sed -i '' -nf ./code ~/.ssh/config
$ cat ./code
/# BEGIN AUTO GENERATED CONTENT/{
p
r config
:loop
n
/# END AUTO GENERATED CONTENT/{
p
d
}
bloop
}
p