3つの異なるソリューションの比較
小さい、使用sed
:
sed -e ':a;N;/\n#MyUniqueString/{s/\n/ domain4.com\n/};H;s/\n.*$//;p;g;s/^.*\n//;ta;' config.file
これは次のように実行できます。
sed -e '
:a;
N;
/\n#MyUniqueString/{
s/\n/ domain4.com\n/
};
H;
s/\n.*$//;
p;
g;
s/^.*\n//;
ta;
' config.file
プロファイリング:
time sed ':a;N;/\n#MyUniqueString/{s/\n/ domain4.com\n/};H;
s/\n.*$//;p;g;s/^.*\n//;ta;' config.file
define hostgroup{
hostgroup_name http-urls ; The name of the hostgroup
alias HTTP URLs ; Long name of the group
members domain1.com, domain2.com, domain3.com, domain4.com
#MyUniqueString
}
real 0m0.010s
user 0m0.000s
sys 0m0.008s
なぜ純粋なbashではないのですか?
フォークがないため、これは非常に高速である可能性があります(構成ファイルbash
が長すぎない場合):
readarray configFile < ./config.file
for ((i=${#configFile};i--;));do
[[ "${configFile[i]}" =~ "#MyUniqueString" ]] && break
done
configFile[i-1]+=" domain4.com"
printf "%s\n" "${configFile[@]//$'\n'/}"
によって実行されるプロファイリング:
time {
readarray configFile < ./config.file
for ((i=${#configFile};i--;));do
[[ "${configFile[i]}" =~ "#MyUniqueString" ]] && break
done
configFile[i-1]+=" domain4.com"
printf "%s\n" "${configFile[@]//$'\n'/}"
}
あげる:
define hostgroup{
hostgroup_name http-urls ; The name of the hostgroup
alias HTTP URLs ; Long name of the group
members domain1.com, domain2.com, domain3.com, domain4.com
#MyUniqueString
}
real 0m0.001s
user 0m0.000s
sys 0m0.000s
でテストするawk
time awk '{a[NR]=$0}/#MyUniqueString/{a[NR-1]=a[NR-1]" domain4.com"}END{for(i=1;i<=NR;i++)print a[i]}' config.file
define hostgroup{
hostgroup_name http-urls ; The name of the hostgroup
alias HTTP URLs ; Long name of the group
members domain1.com, domain2.com, domain3.com, domain4.com
#MyUniqueString
}
real 0m0.009s
user 0m0.004s
sys 0m0.000s