2017-01-04 4 views
1

bash의 새로운 기능입니다.bash 스크립트의 문자열에서 패턴을 추출하십시오.

이 문제를 해결하기 위해 매개 변수 확장, grep, sed 및 echo를 실험했지만 실제로 해결할 수는 없습니다.

나는 $ PWD에서 bash 스크립트로 특정 패턴을 추출하려고한다.

는의 전체 경로의 다양한있을 수 있다고 가정 해 봅시다 :

/home/files/tmp8 
/home/tmp28/essential 
/home/tmp2/essential/log 
/home/files/tmp10/executables 
/tmp8/files/whatever/etc 

모든 경우에, 나는 1 개 이상의 정수 뒤에 "TMP"를 포함하는 모든 문자열을 추출 할.

그래서, $ PWD가 처리되는 각 인스턴스에, 그것은

설명은 "tmp8", "tmp28"등 "tmp2"를 반환하는 방법이 문제를 해결에 관해서 기능/연산자 작업 또한 크게 감사하겠습니다.

답변

1

사용 grep -o은 0 이상의 숫자 뒤에 정규식 tmp[0-9]* 즉 문자 텍스트 tmp를 사용하는 경우에만 일치하는 텍스트를 표시합니다 : 당신은 어떤 경로 문자열에서 패턴을 추출하는 bash는 정규 표현식을 사용할 수 있습니다

grep -o 'tmp[0-9]*' file 
tmp8 
tmp28 
tmp2 
tmp10 
tmp8 
+0

두 가지 설명에 감사드립니다. 추출 된 패턴을 문자열에 할당하거나 다른 명령에서 사용할 수 있습니까? –

+1

추출 된 패턴을 변수'str'에 할당하려면'str = $ (grep -o 'tmp [0-9] *'<<< "$ PWD")'를 사용하십시오. – anubhava

+1

'grep -o 'tmp [ 0-9] * '<<< "$ PWD"'는 매치 된 문자열 즉'tmp '만 반환합니다. – anubhava

3

. 다음 예제를 참조하십시오.

if [[ "$PWD" =~ ^.*(tmp[0-9]+).*$ ]] 
then 
    printf "match: ${BASH_REMATCH[1]}\n" 
else 
    printf "no match: $PWD\n" 
fi 

정규 표현식은 그룹을 둥근 괄호로 정의합니다. 표현식이 일치하는 그룹 (적어도 하나 이상의 숫자가있는 tmp)과 일치하면 Bash가 배열 BASH_REMATCH에 저장합니다.

관련 문제