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 ' ' ,
- 쉼표로 구분된 배열 인쇄