2013-08-16 2 views
3

grep을 사용하여 괄호 안에 값을 가져올 수 없습니다.regex : parenthensis 안에있는 문자를 반환하십시오.

echo "(this is a string)" | grep -Eo '[a-z ]*' 

괄호 안의 값인 "this is a astring"을 반환해야하며 이상적으로 아무 것도 반환하지 않습니다. 누구든지 설명을 알고 있습니까? (?<=\()가 정규식 엔진을 알려주는 부정적인 모습 숨김 주장이다

grep -Po '(?<=\()[^\)]*?' 

: 당신은 괄호를 포함하지 않고 괄호로 둘러싸인 모든 일치하려는 경우

+0

작품을 나를 위해. 유닉스의 어떤 맛이 있습니까? – iruvar

+0

uname을 입력하면 'Linux'만 반환됩니다. 유닉스의 어떤 맛이 나는지 확신 할 수 없습니다. – user2661842

+0

'uname -a'를 사용해보십시오. – squiguy

답변

4

-P (펄 정규식)와이 그렙 작동 :

echo "foo (this is a string) bar" | grep -Po '\(\K[^)]*' 
this is a string 

또는 사용 AWK :

echo "foo (this is a string) bar" | awk -F '[()]+' '{print $2}' 
this is a string 

또는 나오지도 사용 :

echo "foo (this is a string) bar" | sed 's/^.*(\(.*\)*).*$/\1/' 
this is a string 
+0

아마도 내 유닉스 시스템 일 뿐이다. 또한 아무것도 반환하지 않습니다. – user2661842

+0

내 awk 또는 sed 명령을 사용해보십시오. – anubhava

+1

awk 솔루션은 완벽하게 작동합니다. 대안을 가져 주셔서 감사합니다! – user2661842

0

,이 그렙를 사용해야합니다 여는 괄호 앞에있는 문자로 시작합니다. [^\)]*?은 닫는 괄호가 나올 때까지 모든 문자와 일치하도록 지시합니다. -P은 Perl 정규식 구문을 사용하도록 알려줍니다.

+1

echo "(this is an string)"| grep -Eo '(? <= \() [^ \)] *?' 아무 것도 반환하지 않음 – user2661842

+0

'grep -Po'을 사용해보십시오. 이것은 Perl 스타일의 정규 표현식입니다. –

관련 문제