2017-04-10 1 views
1

작은 작업이 있습니다.bash에서 변수의 문자열 유형으로 구분 기호를 변경하십시오.

data="duke,rock,hulk,donovan,john" 

을 그리고 다음 변수에, 내가 먼저 변수의 구분 기호를 변경해야합니다 :

내가 작성해야합니다.

data2="duke|rock|hulk|donovan|john" 

bash에서 올바른 방법은 무엇입니까?

이 부분은 스크립트의 일부입니다. 어떻게해야합니까?

예를 들어, "WHILE-GETOPS-CASE"구문을 사용하여 매개 변수에 사용자 이름을 사용하여 제외 할 수 있습니다.

ls /home/ | egrep -v $data2 
+1

을 당신은'egrep을 -v "$를 원한다 셸이 값에서 와일드 카드 확장 또는 공백 토큰 화를 수행하지 못하도록합니다. – tripleee

+1

'ls'의 출력을 분석하지 마십시오. 패턴과 일치하지 않는 파일이 필요하면 확장 패턴을 사용하십시오. 'ls/home /! (duke | rock | hulk | donovan | john)'. – chepner

답변

5

쉽게 확장과 하나의 문자를 대체 할 수

data="duke,rock,hulk,donovan,john" 
data2=${data//,/|} 
echo "$data2" 

구문을 깨는 :

  • ${data는 "변수 data에있는 값을 기반으로 확장 의미한다
  • //은 "모든 검색어 검색"을 의미하고
  • 외로운 /은 "다음으로 대체하십시오"를 의미합니다.

일부 문자는 이스케이프해야하지만 쉼표 및 세로 막대는 이스케이프해야 할 수도 있습니다.

그럼 당신은이 같은 결과를 필터링 할 수 있습니다

ls /home/ | egrep -v "$data2" 
1

또 다른 매우 유사한 방법 tr을 사용하는 것입니다 (문자를 번역 또는 삭제) :

data="duke,rock,hulk,donovan,john" 
data2=$(echo $data | tr ',' '|') 
echo "$data2" 
관련 문제