Escribir una declaración if que pueda acomodar múltiples condiciones 'o'

Escribir una declaración if que pueda acomodar múltiples condiciones 'o'

Tengo un escenario en el que estoy creando una nueva variable que tendrá solo los servcesvalores de una lista de valores disponibles en 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

Aquí está el código que uso para crear una variable servicesque tendrá solo los valores que contienen los servicios.

for x in $filex
do
 if [[ $x == *"service1"* ]] || [[ $x == *"service2"* ]];then
   Services+=$x","
 fi
done

Mi resultado final será un valor delimitado por comas que se muestra a continuación.

$ cat $Services

alm_service1_ax,alk_service2_av

El problema ahora es que el servicevalor sigue aumentando filexy no puedo ampliar mi ifdeclaración agregando ||. Por ejemplo, si tengo un nuevo servicio bum_service3_bkincluido, filexmi ifestado de cuenta se vería así:

...
 if [[ $x == *"service1"* ]] || [[ $x == *"service2"* ]] || [[ $x == *"service3"* ]] ;then
...

y esto seguirá aumentando por cada nuevo serviceagregado enfilex

¿Hay alguna manera de escribir una ifdeclaración para tener una única condición que pueda acomodar múltiples condiciones o alguna manera mejor de abordar mi problema?

Respuesta1

Evite bucles para procesar texto. Aquí:

grep 'service[123]' filex | paste -sd , -

O:

grep 'service1
service2
service3' filex | paste -sd , -

Respuesta2

Si necesita una respuesta de una línea, utilice:

grep "service" filex | xargs echo | sed 's/ /, /g'

O

Si necesita una sintaxis condicional, puede hacer lo siguiente:

while read -r line
do
if [[ $line == *"service"* ]]
then
   Services+=("$line")
fi
done < "/tmp/filex"

echo "${Services[@]}" | tr ' ' ,

Dará como:

alm_service1_ax,alk_service2_av,alk_service5_av,alk_service3_aff,alk_service5_afds

/tmp/filex- es la ruta de su archivo

echo "${Services[@]}" | tr ' ' ,- imprimir una matriz separada por comas

información relacionada