我有一個場景,我正在創建一個新變量,該變量僅包含servces
中可用值列表中的值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
這是我用來建立變數的程式碼services
,該變數僅包含包含服務的值。
for x in $filex
do
if [[ $x == *"service1"* ]] || [[ $x == *"service2"* ]];then
Services+=$x","
fi
done
我的最終結果將是如下所示的逗號分隔值。
$ cat $Services
alm_service1_ax,alk_service2_av
現在的問題是,service
價值不斷增加filex
,我無法if
透過添加來擴展我的聲明||
。例如,如果我有一項新服務bum_service3_bk
包含在其中,filex
那麼我的if
聲明將如下所示。
...
if [[ $x == *"service1"* ]] || [[ $x == *"service2"* ]] || [[ $x == *"service3"* ]] ;then
...
service
並且對於每一個新添加的內容都會繼續增加filex
有沒有辦法編寫一個if
語句來具有可以容納多個或條件的單一條件或任何更好的方法來解決我的問題?
答案1
避免循環處理文本。這裡:
grep 'service[123]' filex | paste -sd , -
或者:
grep 'service1
service2
service3' filex | paste -sd , -
答案2
如果您需要一行答案,請使用:
grep "service" filex | xargs echo | sed 's/ /, /g'
或者
如果您需要條件語法那麼您可以這樣做:
while read -r line
do
if [[ $line == *"service"* ]]
then
Services+=("$line")
fi
done < "/tmp/filex"
echo "${Services[@]}" | tr ' ' ,
它會給出類似:
alm_service1_ax,alk_service2_av,alk_service5_av,alk_service3_aff,alk_service5_afds
/tmp/filex
- 是你的檔案的路徑
echo "${Services[@]}" | tr ' ' ,
- 列印逗號分隔的陣列