Schreiben einer if-Anweisung, die mehrere „oder“-Bedingungen aufnehmen kann

Schreiben einer if-Anweisung, die mehrere „oder“-Bedingungen aufnehmen kann

servcesIch habe ein Szenario, in dem ich eine neue Variable erstelle, die nur die Werte aus einer Liste mit in verfügbaren Werten enthält 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

Hier ist der Code, den ich verwende, um eine Variable zu erstellen services, die nur die Werte enthält, die Dienste enthalten.

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

Mein Endergebnis wird ein durch Kommas getrennter Wert sein, der unten angezeigt wird.

$ cat $Services

alm_service1_ax,alk_service2_av

Das Problem besteht nun darin, servicedass der Wert in ständig steigt filexund ich meine Anweisung nicht ifdurch Hinzufügen erweitern kann ||. Wenn ich beispielsweise einen neuen Dienst habe, der bum_service3_bkin enthalten ist filex, würde meine ifAnweisung folgendermaßen aussehen.

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

serviceund dieser Wert wird mit jedem neuen Eintrag weiter steigen.filex

Gibt es eine Möglichkeit, eine ifAnweisung mit einer einzigen Bedingung zu verfassen, die mehrere Bedingungen berücksichtigen kann, oder gibt es eine bessere Möglichkeit, mein Problem zu lösen?

Antwort1

Vermeiden Sie Schleifen bei der Textverarbeitung. Hier:

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

Oder:

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

Antwort2

Wenn Sie eine einzeilige Antwort benötigen, verwenden Sie:

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

ODER

Wenn Sie eine bedingte Syntax benötigen, können Sie Folgendes tun:

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

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

Es wird Folgendes geben:

alm_service1_ax,alk_service2_av,alk_service5_av,alk_service3_aff,alk_service5_afds

/tmp/filex- ist der Pfad Ihrer Datei

echo "${Services[@]}" | tr ' ' ,- Drucken eines durch Kommas getrennten Arrays

verwandte Informationen