Linuxの設定ファイルの中身を部分的に書き換える方法
IoT等で外部のイベントを契機にして、サーバやデバイス上にあるOSの設定ファイルを書き換えたり、
AWSのUser Dataにスクリプトを仕込み、EC2起動時にOS上の設定ファイルを書き換えたい時があります。
viやvim等の対話型エディタを開いて編集するのではなく「コマンド一発で設定ファイルの一部を書き換える」ために
sedコマンドで正規表現を指定し、Linuxの設定ファイルの中身を書き換えてみました。
以下は、Zabbixの設定ファイルをsedコマンドで書き換えるサンプルです。
(CentOS7、RHEL7で動作確認)
before確認
まずは現状を確認します。
# 元々コメントアウトされている場合
sudo grep "^ *# php_value date.timezone" /etc/httpd/conf.d/zabbix.conf
# コメントアウトされていない場合
sudo grep "^ *php_value date.timezone" /etc/httpd/conf.d/zabbix.conf
初期状態で1番目のコマンドを実行すると、以下のようになっていました。
ここから、viやvimを使わずに、タイムゾーンをAsia/Tokyoに書き換えます。
# php_value date.timezone Europe/Riga
置換処理
sedコマンドで置換箇所を特定するパターンを正規表現で書いた後、c\の後ろに置換後の文字列を書くと、
その行ごと置換できます。
設定ファイルのバックアップを取ってから、以下を実行します。
# 元々コメントアウトされている場合
sudo sed -i -e "/^ *# php_value date.timezone/c\ php_value date.timezone Asia/Tokyo" /etc/httpd/conf.d/zabbix.conf
# コメントアウトされていない場合
sudo sed -i -e "/^ *php_value date.timezone/c\ php_value date.timezone Asia/Tokyo" /etc/httpd/conf.d/zabbix.conf
例えば、「USER=aaa」の行を「USER=abc」と編集したいときは
「/^USER=/c\USER=abc」と書けば良いです。
そして、後ろに設定ファイルのパスを書けばOK。
簡単ですね。
雑な言い方をすると、このやり方であれば、何とでもなります。捗りますよ。
after確認
結果も以下のコマンドで確認します。
# コメントアウトされている行がないことの確認
sudo grep "^ *# php_value date.timezone" /etc/httpd/conf.d/zabbix.conf
# 想定通り置換されたことの確認
sudo grep "^ *php_value date.timezone" /etc/httpd/conf.d/zabbix.conf
2番目のコマンドを実行すると、以下のようになり、設定が書き換わっていることを確認できます。
php_value date.timezone Asia/Tokyo
この方法を使えば、コマンドだけでは変更できない設定も、
自動で変更できるようになり、いろいろと捗るようになります。
2018/8/14追記: sedもエディタである
お恥ずかしながら「sed」=「stream editor」という由来を全く知らずに、記事を書いておりました。(無学がバレてしまいます。。。)
「対話型エディタを使わないで編集する」という意図で、ご理解いただけますと幸いです。
ご指導いただきました全ての方に、感謝申し上げます。
Author And Source
この問題について(Linuxの設定ファイルの中身を部分的に書き換える方法), 我々は、より多くの情報をここで見つけました https://qiita.com/nasuvitz/items/a4fc70210332187a7586著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .