1

設定で満たされた構成ファイルがあります。設定の束のように。たとえば、置換を自動化する方法を知りたいです。

私は持っていてLF_ALERT_TO = ""、それに電子メールを追加したいと思います。

質問 2:

そのための電子メールを取得するために opts to を使用できますか? 例:

./run --email e.mail@here.com

私の現在のコードレイアウト:

wget http://www.configserver.com/free/csf.tgz
tar -zxvf csf.tgz
cd csf
./install.sh
(modifiy values in /etc/csf/csf.conf
4

3 に答える 3

3

私があなたを正しく理解していれば、電子メールが$EMAILVAR環境変数に保存されていると仮定して、そのタスクに sed を使用できます。

sed -i -e "s/\\(LF_ALERT_TO[ \\t]*=[ \\t]*\"\\)[^\"]*\"/\\1$EMAILVAR\"/" config.txt

ここでは、次を含む文字列を (順番に) 置き換えるように sed に指示します。

  1. LF_ALERT_TO
  2. 一連のスペースおよび/またはタブ ( [ \t]*)
  3. =
  4. 別の一連のスペースおよび/またはタブ
  5. "
  6. "( [^"]*)ではない一連の文字
  7. "

アイテム 1 ~ 5 は、バックスラッシュ付きの括弧の間に配置されます。これはキャプチャ グループを形成するため、一致するものは と呼ばれる補助的な「変数」に格納されます\1

次に、以下で構成される文字列を生成します。

  1. \1、すなわち。上記の手順 1 ~ 5 に一致するもの
  2. ご希望のメール
  3. クロージング"(キャプチャされていないため)

コマンドでフラグを使用して-i、ファイルをその場で編集するようにsedに指示します(つまり、入力として使用してコマンドを実行しconfig.txt、出力を同じファイルの上に保存します)。

これが少し役立つことを願っています=)

于 2012-10-08T18:24:46.780 に答える
2

LF_ALERT_TO = "e.mail@here.com"csf.conf で必要に応じて

sed -i 's/LF_ALERT_TO = ""/LF_ALERT_TO = "e.mail@here.com"/g' csf.conf

動作するはずです。

電子メールを変数として渡したい場合:

kent$  cat csf.conf
foo
LF_ALERT_TO = ""
foo
bar
whatever
kent$  em="e.mail@here.com" 

kent$  sed  "s/LF_ALERT_TO = \"\"/LF_ALERT_TO = \"$em\"/g" csf.conf 
foo
LF_ALERT_TO = "e.mail@here.com"
foo
bar
whatever

sed -i "..." csf.conf will change the original file.

于 2012-10-08T18:28:46.510 に答える
1

1つのファイルで置き換える必要がありますか? その場合は、vim の使用を検討してください。検索/置換コマンドは次のとおりです。

%s/LF_ALERT_TO = ""/LF_ALERT_TO = "email@email.com"/g

一連のファイルを置き換える必要がある場合は、次のコマンドの使用を検討してください。

find path_to_find -iname "filemask" -exec sed -i 's/LF_ALERT_TO = ""/LF_ALERT_TO = "email@email.com/g" {} \;
于 2012-10-08T18:26:16.093 に答える