/etc/ntp.conf
設定の自動更新を使用したいとしますsed
。ntp.conf
定義された形式を許可リストファイル全体に表示される行に同じキーワードを使用します。たとえば、
# first block occurrences
server 1.1.1.1
server 2.2.2.2
driftfile /var/lib/ntp/drift
# second block of occurrences
server 3.3.3.3
server 4.4.4.4
ntp
これで、5.5.5.5、6.6.6.6、7.7.7.7などのサーバーのリストが更新されました。私が望む結果は次のとおりです。
# first block occurrences
server 5.5.5.5
server 6.6.6.6
server 7.7.7.7
driftfile /var/lib/ntp/drift
# second block of occurrences
これに使用できますかsed
?この問題に適したツールですか、それとも別のツールを使用する必要がありますか?
PS:2番目のブロック(または両方のブロック)の発生をコメントアウトすることもオプションかもしれません。
答え1
list.txt
次のファイルに新しいサーバーのリストがある場合cwd
:
sed '/^server/{x;//!r list.txt
d}' /etc/ntp.conf
または、ファイルを使用せずに新しいサーバー名をハードコードしたい場合:
sed '/^server/{x;//!c\
server 1\
........\
server n-1\
server n
d}' /etc/ntp.conf
これは次のように仮定します。コメントされていない項目が 1 つ以上あります。 server
ワイヤーあなたのものから/etc/ntp.conf
(また、コメント化された行は削除されませんserver
。その行も含めるように正規表現を変更できます)。ソースファイルにサーバーエントリがない場合でもこの行を挿入するには(この場合は新しいサーバーがファイルの末尾に追加されます)、次のようにします。
sed '/^server/{x;//!r list.txt
d}
${x;//!r list.txt
x}' /etc/ntp.conf
または必要に応じて同じ条件を使用してくださいc\
。練習用に残しておきます。すべてのバックスラッシュがある行を変更するときは、埋め込まれた改行はバックスラッシュにエスケープする必要があることに注意してくださいc\
(例のように)。
答え2
sed '
/^server/ d
/first block/a\
server 5.5.5.5\
server 6.6.6.6\
server 7.7.7.7
' /etc/ntp.conf
最初の項目のみを変更します。
# first block occurrences
server 5.5.5.5
server 6.6.6.6
server 7.7.7.7
driftfile /var/lib/ntp/drift
# second block of occurrences