2013-03-18 2 views
0

나는 두 개의 문자 (9 & 0 0가 문자열의 마지막 문자이어야 함) 정확히 두 개의 문자와 일치하는 문자열을 검색 할 문자열을 지정하면 하위 문자열 검색 bash는 스크립트

string="asd20 92x0x 72x0 YX92s0 0xx0 92x0x" 
#I want to select substring YX92s0 from that above string 

for var in $string 
do 
if [[ "$var" == *9**0 ]]; then 
    echo $var // Should print YX92s0 only 
fi 
done 

사이

분명히 위의 명령이 작동하지 않습니다.

답변

1

각 요소는 *9??0 패턴과 일치시킵니다. 이것을 할 수있는 몇 가지 방법이 있습니다. 이 문자열을 사용하여 서브 쉘에서 위치 매개 변수를 설정 한 다음 for 루프에서 반복합니다.

(set -- $string 
    for elt; do [[ $elt == *9??0 ]] && { echo "found"; exit; }; done) 
+0

죄송합니다. 원래 질문에 루프를 추가하지 않았습니다. 실제로 하나가있었습니다. 제 질문은 검색 패턴에 관한 것입니다. 내 패턴 * 9 ** 0을 * 9 ?? 0으로 바꿨을 때 조건이 잘 작동했다면 :). 감사 – yalkris

0
string="asd20 92x0x 72x0 X92s0 0xx0" 

if [[ $string =~ [[:space:]].?9.{2}0[[:space:]] ]]; then 
    echo "found" 
fi 

또는 더 나은,을 spliting 단어의 활용 :

string="asd20 92x0x 72x0 X92s0 0xx0" 

for s in $string; do 
    if [[ $s =~ (.*9.{2}0) ]]; then 
     echo "${BASH_REMATCH[1]} found" 
    fi 
done 

와 정규식입니다.

+0

이 솔루션은 "X9xx0 9xx0x"문자열에서 작동하지 않습니다. 다시 X9xx0 – yalkris

+0

복사/붙여 넣기 대신 9xx0x를 반환하고 이에 따라 편집 된 게시물을 보냈습니다. 첫 번째 문자와 첫 문자 사이에 아무 것도 없다는 가정을했습니다. –

+0

IMO 두 번째 솔루션에는 $ -anchor가 필요합니다. – Scrutinizer