servces
.NET에서 사용할 수 있는 값 목록의 값만 포함하는 새 변수를 만드는 시나리오가 있습니다 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 ' ' ,
- 쉼표로 구분된 배열 인쇄