일치하는 항목이 중복되지 않습니다. 귀하의 정규식은 2
과 일치합니다. 2
이후의 공란은 없어졌습니다. 추가 경기는 고려하지 않습니다.
입니다
grep -o ' [0-9 ]* ' | grep -E -o '[0-9]+'
, 시퀀스 일치 ([lL]
을 지원하지 않습니다, 당신의 정규식에서 간체)
POSIX grep
는 한 번에 당신이 원하는 것을 할 수는 없지만 두 단계에서이 같은 작업을 수행 할 수 있습니다 공백으로 구분 된 숫자를 앞뒤 공백으로 구분하여 공백에 관계없이 개별 숫자와 일치시킵니다. 귀하의 필요에 맞게 번호의 정의를 단순화하십시오.
grep -oP " (0|[1-9]+[0-9]*)[Ll]?(?=)"
(?=)
이 grep
은 앞서 볼 것이다 의미 내다 주장입니다 : 코멘트에 언급 한 바와 같이
펄 호환 정규 표현식은, 예를 들어,을 사용하지 않고 물건을 일치 수있는 방법이 입력 스트림을 확인하고 그 뒤에 일치하는 공백이 있는지 확인하십시오. 공백은 경기의 일부로 간주되지 않으며 소비되지 않습니다. 공백이 없으면 일치하지 않습니다.
PCRE는 grep
의 모든 구현에서 작동하지 않을 수도 있습니다.
편집 : -o
은 Posix에서 지정하지 않습니다.
'2'와 (와) 일치하면 공간을 소비합니다. ''grep -oP ''(0 | [1-9] + [0-9] *) [Ll]? (? =) "' – 123
@ 123 라인의 시작/끝을 고려하고 공백을 없애기 위해 출력에서'grep -oP "(^ |) \ K ((0 | [1-9] + [0-9] *) [Ll]?) (? = | $) "' – Aserre
@Aserre 나는 두 개의 공백 사이에서 OP 정의 단어로 의도적으로 그것을 복잡하게 만들지는 않았지만 할 수 있었다. – 123