Escrevendo se a instrução puder acomodar várias 'ou' condições

0

Eu não posso escolher um título correto para o meu cenário e, por favor, edite-o se você sabe qual é o meu problema. Eu tenho um cenário onde estou criando uma nova variável que terá apenas os valores servces de uma lista de valores disponíveis em 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

Aqui está o código que eu uso para criar uma variável services , que terá apenas os valores que possuem serviços.

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

Meu resultado final será um valor delimitado por vírgulas mostrado abaixo.

$ cat $Services

alm_service1_ax,alk_service2_av

O problema agora é que o valor service continua aumentando em filex e não posso estender minha declaração if adicionando || . Por exemplo, se eu tiver um novo serviço, digamos bum_service3_bk incluído em filex , então minha instrução if ficaria assim ...

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

e isso continuará aumentando a cada novo service adicionado em filex

Existe uma maneira de escrever uma instrução if para ter uma única condição que possa acomodar várias condições ou uma maneira melhor de resolver meu problema?

    
por Alex Raj Kaliamoorthy 30.09.2016 / 08:56

2 respostas

0

Evite loops para processar texto . Aqui:

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

Ou:

grep 'service1
service2
service3' filex | paste -sd , -
    
por 30.09.2016 / 09:26
0

Se você precisar de uma resposta de linha, use:

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

OR

se você precisar de sintaxe condicional, poderá fazer o seguinte:

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

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

Vai dar como:

alm_service1_ax,alk_service2_av,alk_service5_av,alk_service3_aff,alk_service5_afds

/tmp/filex - é o caminho do seu arquivo

echo "${Services[@]}" | tr ' ' , - imprimindo matriz separada por vírgula

    
por 30.09.2016 / 09:51