演算set Z=2;6;11;165;95;59;131
などがあります。Z
次のテキストを置き換えて結果をファイルにリンクしたいと思います。
HSS-ServiceType=vpbxdZ
HSS-ServiceTrigger=Z0401
no HSS-SptGroup=1
no HSS-SptGroup=2
commit -s
up
HSS-ServiceTrigger=Z0471
no HSS-SptGroup=1
no HSS-SptGroup=2
commit -s
up
no HSS-ServiceProfile=vpbxdZs1
commit -s
no HSS-ServiceTrigger=Z0401
commit -s
no HSS-ServiceTrigger=Z0471
commit -s
up
no HSS-ServiceType=vpbxdZ
commit -s
awk
私は以下のようなことを試しました
awk 'BEGIN { for(Z=2;6;11;165;95;59;131) print
/HSS-ServiceType=vpbxdZ
/HSS-ServiceTrigger=Z0401
/ no HSS-SptGroup=1
/ no HSS-SptGroup=2
/commit -s
up
/HSS-ServiceTrigger=Z0471
/ no HSS-SptGroup=1
/ no HSS-SptGroup=2
/commit -s
/ up
/no HSS-ServiceProfile=vpbxdZs1
/commit -s
/no HSS-ServiceTrigger=Z0401
/commit -s
/no HSS-ServiceTrigger=Z0471
/commit -s
/up
/no HSS-ServiceType=vpbxdZ
/commit -s }' test1.txt
しかし、エラーのため失敗します
"^ unterminated regexp":
希望の出力は次のとおりです。
HSS-ServiceType=vpbxd2
HSS-ServiceTrigger=20401
no HSS-SptGroup=1
no HSS-SptGroup=2
commit -s
up
HSS-ServiceTrigger=20471
no HSS-SptGroup=1
no HSS-SptGroup=2
commit -s
up
no HSS-ServiceProfile=vpbxd2s1
commit -s
no HSS-ServiceTrigger=20401
commit -s
no HSS-ServiceTrigger=20471
commit -s
up
no HSS-ServiceType=vpbxd2
commit -s
HSS-ServiceType=vpbxd6
HSS-ServiceTrigger=60401
no HSS-SptGroup=1
no HSS-SptGroup=2
commit -s
up
HSS-ServiceTrigger=60471
no HSS-SptGroup=1
no HSS-SptGroup=2
commit -s
up
no HSS-ServiceProfile=vpbxd6s1
commit -s
no HSS-ServiceTrigger=60401
commit -s
no HSS-ServiceTrigger=60471
commit -s
up
no HSS-ServiceType=vpbxd6
commit -s
HSS-ServiceType=vpbxd11
HSS-ServiceTrigger=110401
no HSS-SptGroup=1
no HSS-SptGroup=2
commit -s
up
HSS-ServiceTrigger=110471
no HSS-SptGroup=1
no HSS-SptGroup=2
commit -s
up
no HSS-ServiceProfile=vpbxd11s1
commit -s
no HSS-ServiceTrigger=110401
commit -s
no HSS-ServiceTrigger=110471
commit -s
up
no HSS-ServiceType=vpbxd11
commit -s
HSS-ServiceType=vpbxd165
HSS-ServiceTrigger=1650401
no HSS-SptGroup=1
no HSS-SptGroup=2
commit -s
up
HSS-ServiceTrigger=1650471
no HSS-SptGroup=1
no HSS-SptGroup=2
commit -s
up
no HSS-ServiceProfile=vpbxd165s1
commit -s
no HSS-ServiceTrigger=1650401
commit -s
no HSS-ServiceTrigger=1650471
commit -s
up
no HSS-ServiceType=vpbxd165
commit -s
HSS-ServiceType=vpbxd95
HSS-ServiceTrigger=950401
no HSS-SptGroup=1
no HSS-SptGroup=2
commit -s
up
HSS-ServiceTrigger=950471
no HSS-SptGroup=1
no HSS-SptGroup=2
commit -s
up
no HSS-ServiceProfile=vpbxd95s1
commit -s
no HSS-ServiceTrigger=950401
commit -s
no HSS-ServiceTrigger=950471
commit -s
up
no HSS-ServiceType=vpbxd95
commit -s
これは元のファイルの7つのコピーであり、各コピーは元の試行のループステートメントにZ
基づいてfor
異なる値に置き換えられました。
答え1
私の考えでは、サンプルファイルのZ値を変更したいようです。
for z in 2 6 11 165 95 59 131
do
sed -e "s/=Z/=$z/" -e "s/dZ/d$z/" sample.txt
done > result.txt
どこ
sample.txt
あなたのスタートアップファイルは何ですか-e "s/=Z/=$z/"
-e "s/dZ/d$z/"
実際の検索と交換の順序です。
答え2
awk自体内でforループを実行できます。
Z="2;6;11;165;95;59;131" \
awk '
BEGIN { I = ENVIRON["Z"] }
{ f = f $0 ORS }
END {
N = split(I, a, ";")
for (i=1; i<=N; i++) {
t = f
gsub(/dZ/, "d" a[i], t)
gsub(/=Z/, "=" a[i], t)
print t
}
}
' file.txt
環境変数Zにインデックスを格納します。
セミコロン abd に分割し、繰り返し可能なインデックスを配列 a に格納します。
ファイル全体をvar fに入れます。
最後に、インデックスを繰り返し、正規表現dZと= Zを繰り返し可能な項目に置き換えます。変数を印刷します。別のサイコロで繰り返します。