Tengo un escenario en el que estoy creando una nueva variable que tendrá solo los servces
valores 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 services
que 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 service
valor sigue aumentando filex
y no puedo ampliar mi if
declaración agregando ||
. Por ejemplo, si tengo un nuevo servicio bum_service3_bk
incluido, filex
mi if
estado de cuenta se vería así:
...
if [[ $x == *"service1"* ]] || [[ $x == *"service2"* ]] || [[ $x == *"service3"* ]] ;then
...
y esto seguirá aumentando por cada nuevo service
agregado enfilex
¿Hay alguna manera de escribir una if
declaració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