2回繰り返されるファイルの内容を変更しようとしており、同じファイルの2番目の内容に追加の行を追加したいと思います。
サンプルファイル
User YOURNAME
IdentityFile ~/.ssh/YOURKEY
.
.
.
User YOURNAME
Installing
Installing
スクリプト実行後のサンプル出力
User adminuser
IdentityFile ~/.ssh/id_rsa
.
.
.
User adminuser
IdentityFile ~/.ssh/id_rsa
Installing
Installing
次のコマンドを変更しuser
て使用できますYOURKEY
sed
`sed- i s/"YOURNAME/adminuser"/g /root/.ssh/config`
`sed -i 's/YOURKEY/id_rsa/g' ff1`
IdentityFile ~/.ssh/id_rsa
ただし、次の行を挿入できません。
編集済み
追加情報は、****User adminuser
行の先頭にスペースがあることです。これらのファイルは毎日同期されるため、IdentityFile
行を削除することはできません。同期後に置き換えられます。
最終編集は必要に応じて行われました。
perl -i -ne 'next if /IdentityFile/;
s#YOURNAME#adminuser\n IdentityFile ~/.ssh/id_rsa#;
print' filename
答え1
すべてのケースを削除しIdentityFile
て明示的に再追加してください。
$ perl -i -ne 'next if /IdentityFile/;
s#YOURNAME#adminuser\nIdentityFile ~/.ssh/id_rsa#;
print' file
$ cat file
User adminuser
IdentityFile ~/.ssh/id_rsa
.
.
.
User adminuser
IdentityFile ~/.ssh/id_rsa
Installing
Installing
next if /IdentityFile/
一致する行をスキップしますIdentityFile
。s#YOURNAME#adminuser\nIdentityFile ~/.ssh/id_rsa#
すべてのインスタンスは、 newline および line に置き換えられます。最後に、すべての行を印刷します。YOURNAME
adminuser
IdentityFile
print
答え2
問題の一部は、テンプレートが一貫性がないことです。持つ1IdentityFile
行、2行目はいいえ。まず、既存のIdentityFile
行を削除してから、必要な行を追加して一貫性を維持できます。
行を削除するには:
sed -i '/^IdentityFile /d' filename
行を追加するには、sed
次のようにします。マッチラインUser
と追加たとえば、1行
sed -e '/^User /'a'\
IdentityFile ~/.ssh/id_rsa' filename