複数のOR条件に対応できるif文の作成

複数のOR条件に対応できるif文の作成

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 ' ' ,- コンマで区切られた配列の印刷

関連情報