3

domainList と config.cnf の 2 つのファイルがあります。domainList ファイルには、次のようなドメインのリストが含まれています。

facebook.com
yahoo.com
youtube.com

config.cnf は構成ファイルで、同じリストの形式が少し異なります。リストが更新されたときに構成ファイルを更新するスクリプトを作成する必要があります。最初のリストが更新されるたびに、bash スクリプトを実行できます。構成ファイルのリストの形式は次のとおりです...

*other config options/entries*
[my_list]
WWW.1 = facebook.com
WWW.2 = yahoo.com
WWW.3 = youtube.com
EOF

したがって、yahoo が削除され、ebay が domainList に追加され、クールな bash スクリプトを実行した場合、構成ファイルを次のように更新する必要があります...

*other config options/entries*
[my_list]
WWW.1 = facebook.com
WWW.2 = youtube.com
WWW.3 = ebay.com
EOF

やや複雑なことに、ドメインにはサブドメインとワイルドカード (つまり、news.google.com または *.google.com) を含めることができます。これを達成する方法についてのアイデアをいただければ幸いです。数字をすべて狂わせずにそれを行うにはどうすればよいですか?おそらく、リストをクリアして毎回再生成する必要があるだけですよね?

ありがとう!

EV

4

4 に答える 4

6

これを実現するための簡単なスクリプトを次に示します。

# delete all lines after [my_list]
sed -i '/my_list/q' config.cnf

# add the domain list to the bottom of the config
awk '{print "WWW." NR " = " $0}' domainList >> config.cnf

このスクリプトは、awk または sed を使用して 1 行で記述できますが、上記は (うまくいけば) そのアプローチが非常に明確です。

于 2012-06-14T20:25:13.663 に答える
0

ここにawkのワンライナーがあります

awk '
BEGIN{var=1}
NR==FNR{a[NR]=$1;next} 
var && /WWW/{var=0; for (x=1;x<=length(a);x++) {print "WWW." x " = " a[x]};next}
!var && /WWW/ {next}
1' domainList config.cnf > config.cnf_new

テスト:

$ cat domainList 
facebook.com
youtube.com
ebay.com

$ cat config.cnf
*other config options/entries*
[my_list]
WWW.1 = facebook.com
WWW.2 = yahoo.com
WWW.3 = youtube.com
EOF

$ awk ' 
BEGIN{var=1}
NR==FNR{a[NR]=$1;next} 
var && /WWW/{var=0; for (x=1;x<=length(a);x++) {print "WWW." x " = " a[x]};next}
!var && /WWW/ {next}
1' domainList config.cnf
*other config options/entries*
[my_list]
WWW.1 = facebook.com
WWW.2 = youtube.com
WWW.3 = ebay.com
EOF
$ 
于 2012-06-14T21:15:24.733 に答える
0
#!/usr/bin/env bash

FIN=domainList
FOUT=config.cnf

echo "config.cnf template header" > $FOUT
awk '{ print "WWW." FNR " = " $1 }' $FIN >> $FOUT
echo "config.cnf template footer" >> $FOUT
于 2012-06-14T20:21:54.207 に答える
0

awkのタッチでbashする

while IFS= read -r line; do
  echo "$line"
  if [[ $line = '[my_list]' ]]; then
    awk '{print "WWW." NR " = " $0}' domainList
    echo "EOF" # is this literally in your config file?
    break
  fi
done < config.cnf > tmpfile && mv tmpfile config.cnf
于 2012-06-14T22:11:57.630 に答える