2012-03-10 3 views
0

grep을 사용하여 파일에서 부품을 추출하지만 올바르게 작동시키는 데 문제가 있습니다. 문자열에서PCRE - 첫 번째 일치

something0(something1 

나는 어떤 것을 추출하고 싶습니다 .0. 이

echo 'a b()c d(e f' | grep -Po '(?m)^.+?(?=\(.+)' #outputs 'a b' and '() c d' 

가 어떻게 GREP은 첫 경기를 반환하거나 내 정규식을 개선 할 것, 다른 입력에 너무 잘, 어떤 입력에

echo 'a b(c d' | grep -Po '(?m)^.+?(?=\(.+)' #outputs 'a b' 

하지만하지를 잘 작동? 에 배관 greps 출력,

head -n 1 

다음 라인 전체 파일을 읽을 수 그렙 이후 대체하지 내가이만이 출력을 misstaking 아니에요 경우 첫 번째는 이제까지 파일에 일치합니다. 그것은 당신이 확신, 모든 '('.

감사합니다.

-P

답변

0

원하는 것과 정확히 일치하는 부분은 무엇입니까?

^[^(]*?(?=\() 
+0

감사합니다. 나는 그 질문이 사소하다는 것을 이해하지만, 정규 표현식은 나에게 꽤 새로운 것이다. –

+0

@ MLP Np m8. 기꺼이 도와주세요. – FailedDev

0

어를 포함하지 않는 something0을 가정하는 것이 좋아요입니까?

$ echo 'a b()c d(e f' | grep -Po '(?m)^.+?(?=\(.+)' 
a b 

(또한 지난주의 +은 필요하지 않습니다. 정규 표현식은 (?m)^.+?(?=\(.)과 같습니다.

+0

예. 출력은 'a b'와 '() c d'입니다. 불필요한 '+'를 지적 해 주셔서 감사합니다. –

0

다음 정규 표현식을 사용해보세요. 작동 방식 :

$ echo 'a b(c d' | grep -Po '^([^(]*)' 
a b 
$ echo 'a b()c d(e f' | grep -Po '^([^(]*)' 
a b 
관련 문제