servces
で利用可能な値のリストの値のみを含む新しい変数を作成するシナリオがありますfilex
。
$ cat filex
all_name1_db
all_name2_dm
alm_service1_ax
all_name3_du
alz_name4_dx
ali_name5_dk
alk_service2_av
alf_name6_df
alj_name7_dq
services
これは、包含サービスの値のみを含む変数を生成するために使用するコードです。
for x in $filex
do
if [[ $x == *"service1"* ]] || [[ $x == *"service2"* ]];then
Services+=$x","
fi
done
私の最終結果は、以下のようにコンマで区切られた値になります。
$ cat $Services
alm_service1_ax,alk_service2_av
今問題は、service
値が増加しfilex
続けるif
。||
たとえば、新しいサービスがbum_service3_bk
含まれている場合、filex
私のif
宣言は次のようになります。
...
if [[ $x == *"service1"* ]] || [[ $x == *"service2"* ]] || [[ $x == *"service3"* ]] ;then
...
service
新機能が追加されるたびに成長し続けます。filex
if
複数の条件を保持できる単一の条件を持つようにステートメントを作成する方法や、問題を解決するより良い方法はありますか?
答え1
テキストの繰り返し防止。ここで:
grep 'service[123]' filex | paste -sd , -
または:
grep 'service1
service2
service3' filex | paste -sd , -
答え2
1行の回答が必要な場合は、次を使用してください。
grep "service" filex | xargs echo | sed 's/ /, /g'
または
条件付き構文が必要な場合は、次のことができます。
while read -r line
do
if [[ $line == *"service"* ]]
then
Services+=("$line")
fi
done < "/tmp/filex"
echo "${Services[@]}" | tr ' ' ,
それは次のようなものを与えます:
alm_service1_ax,alk_service2_av,alk_service5_av,alk_service3_aff,alk_service5_afds
/tmp/filex
- ファイルのパスです
echo "${Services[@]}" | tr ' ' ,
- コンマで区切られた配列の印刷