2014-09-23 4 views
6

나는 다음과 같은 문자열을 포함 inet라는 변수가 있습니다여러 대체

inet="inetnum:  10.19.153.120 - 10.19.153.127" 

내가 아래에 표기하기 위해 문자열을 변환하고 싶습니다 :

10.19.153.120 10.19.153.127 

내가 쉽게 수를 sed 's/^inetnum: *//;s/^ -//'으로 이것을 달성하십시오, 그러나 나는 더 콤팩트/우아한 해결책을 선호하고 배쉬를 사용합니다. 중첩 된 매개 변수 확장이 작동하지 않습니다.

$ echo ${${inet//inetnum: /}// -/} 
bash: ${${inet//inetnum: /}// -/}: bad substitution 
$ 

다른 제안 사항이 있습니까? 아니면 이번에 sed을 사용해야합니까?

두 단계에서 그것을 할 필요가 있도록 만, 한 번에 하나의 대체를 할 수

답변

8

:

newinet=${inet/inetnum: /} 
echo ${newinet/ -/} 
3

뿐만 아니라 bash에서 정규 표현식을 사용

[[ $inet =~ ([0-9].*)\ -\ ([0-9].*)$ ]] && newinet=${BASH_REMATCH[@]:1:2} 

정규 표현식 아마도 더 강력 할 수 있지만 예제 문자열에 두 개의 IP 주소를 캡처해야합니다. 두 캡처 그룹은 배열 매개 변수 BASH_REMATCH의 인덱스 1과 2에서 각각 발견되며 매개 변수 newinet에 할당됩니다.

관련 문제