2014-07-18 1 views
2

AaAa 문자열을 사용합시다. 나는 a의 일치하려는 :grep/egrep 모든 연산자와 일치하지 않는 별 연산자

$ echo AaAa | grep -o a 
a 
a 

그래서 그냥 첫 번째 모든 경기를 인쇄하고 있지 않습니다. 내가 얻을 a 후 별을 추가하면

$ echo AaAa | grep -o 'a*' 
$ 

다음 왜 그렙 출력하지 모든 경기가이 시간을 했습니까? 대체되었다

$ echo AaAa | sed 's/a*/x/g' 
xAxAx 

문자열 :

$ echo AaAa | grep 'a*' 
AaAa 

그것이 내가 sed을 사용 일치해야 얼마나 많은 일치 보려면 : 나는 우리가 라인 전체를 인쇄 -o 옵션을 제거하는 경우가 있기 때문에 일치 알고 xgrep -o이 인쇄되어 있어야합니다.

  1. 일치의 시작에서 널 (null) 문자열 a 제로 시간은
  2. 첫 번째 a
  3. a

이유는 다음 두 번째 인쇄되지 않았던 다음과 같이 그래서 경기는 ?

$ echo AaAa | grep -o 'a*' 

a 
a 
$ 

편집

위는 GNU의 그렙으로 이루어졌다 2.5.1 다음은 GNU 그렙 (grep)로 여전히 didn를 2.6.3

$ echo AaAa | grep -o 'a*' 
a 
a 
$ 

공지 것으로 이루어졌다 ' 첫 번째 null 문자열을 자체 행에 인쇄합니다. 이 새로운 릴리스에서는 버그가 부분적으로 수정 된 것 같습니다. 위의 sed 예제와 같이 null 문자열도 일치해야하지 않습니까?

+0

try echo AaAa | grep a. * – Philip

+0

파일/폴더와 일치하는 인용 부호가없는'*'를 사용하고 있습니다. –

+0

흥미 롭습니다. 싱글 쿼트 문자열을 사용하는 GNU grep 2.5.1 (OSX 10.7.5)에서는이를 재현 할 수 있지만 GNU grep 2.10 (Ubuntu 12.04)에서는 재현 할 수 없습니다. 정규 표현식'a +'는 두 시스템 모두에서 두 개의 일치를 반환합니다. – whereswalden

답변

2

이의이 시작하자 :

$ echo AaAa | grep -o 'a*' 
$ 

이 버전 2.5.1에 실행 된 언급했다. 이것은 2.5.3에서 수정 된 것으로 보이는 grep의 버그 인 것 같습니다.

여기 GNU grep development에서 견적입니다 :

2.5.3 
===== 
Fix the combinations: 
* -i -o 
* --colour -i 
* -o -b 
* -o and zero-width matches 
Go through the bug list im my mailbox and fix fixable. 
Fix bugs reported with 2.5.2. 

-o 제로 폭 일치 우리가 여기서 다루는 것 같다 버그입니다. zero width assertion은 문자열에서 일치하는 문자를 소비하지 않지만 여전히 일치해야하므로 일치해야합니다. 이 경우 제로 너비 어설 션은 문자 a을 0 번 일치시킵니다.다음 부분에

는 :

$ echo AaAa | grep -o 'a*' 
a 
a 
$ 

난 당신이 여기에 빈 줄을하지 않는 이유는 -o 플래그 그냥 제로 폭 주장에 대해 아무것도 인쇄되지 않습니다 그냥 생각합니다.

1

당신은 awk를 사용하여 중복을 제거 할 수 있습니다

$ echo AaAa | grep -o a|awk '!x[$0]++' 
a 
관련 문제