servces
Ich 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, service
dass der Wert in ständig steigt filex
und ich meine Anweisung nicht if
durch Hinzufügen erweitern kann ||
. Wenn ich beispielsweise einen neuen Dienst habe, der bum_service3_bk
in enthalten ist filex
, würde meine if
Anweisung folgendermaßen aussehen.
...
if [[ $x == *"service1"* ]] || [[ $x == *"service2"* ]] || [[ $x == *"service3"* ]] ;then
...
service
und dieser Wert wird mit jedem neuen Eintrag weiter steigen.filex
Gibt es eine Möglichkeit, eine if
Anweisung 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