2014-10-13 1 views
2

bash 표현을 사용하는 스크립트가 두 개의 구분 기호 사이에서 부분 문자열을 추출하기 위해 grep 내에 있습니다. 예 : 나는 busybox을 실행하는 플랫폼이 스크립트를 포팅 할 때두 구분 기호 사이에 grep 하위 문자열

echo BeginMiddleEnd | grep -oP '(?<=Begin).*(?=End)' 

문제는, '통합'grep는 -P 스위치를 인식하지 못합니다. grepregular expressions을 사용하여이를 수행 할 수있는 명확한 방법이 있습니까?

편집 : 해당 플랫폼에 perl, sed 또는 awk이 없습니다. 경량의 linux입니다.

+2

Perl을 사용할 수없는 이유가 있습니까? –

+0

해당 플랫폼에는 'perl'이 없으며 기본 도구 만, 주로 'busybox' – Ulrik

답변

3

을, 당신은 그렙 비와

sed -nr 's/.*Begin(.*)End.*/\1/p' 

사용할 수 있습니다 -greedy 한정 기호를 사용하면 행당 하나 이상을 인쇄 할 수도 있습니다.

6

당신은 같은 출력을 얻기 위해이 같은 사용자 정의 필드 분리와 awk를 사용할 수 있습니다 줄에 더 이상의 발생이 없어 가정

echo 'BeginMiddleEnd' | awk -F 'Begin|End' '{print $2}' 
Middle 
0

사용 bash 내장 된 매개 변수 치환 :

# grab some string from grep output 
f=BeginMiddleEnd 
middleend=${f/Begin/} # do some substitution to lose "Begin" 

echo $middleend 
MiddleEnd 

beginmiddle=${f%%End} # strip from right end to lose "End" 
echo $beginmiddle 
BeginMiddle 

로드 더 많은 예제 here.