정규 표현식이 일치하지 않습니다.

정규 표현식이 일치하지 않습니다.

이거 왜 안 어울려..?

sed -e '/--Updated?[[:space:]]+Date/d' inputfile

이것..:

--Updated Date: 2013-11-06 15:32:13

d?Update Date때로는 , 때로는 을 가지고 있기 때문입니다 Updated Date.

제거를 위해? 나도 그것을 시도했지만 \s작동하지 않습니다.

답변1

이 매개변수를 사용해야 합니다 -r. 사용해 보세요

sed -r '/--Updated?[[:space:]]+Date/d' inputfile

답변 업데이트

을 사용하면 sed '/something/d'이에 일치하는 모든 행이 삭제됩니다.

-r -매개변수 -r은 확장 정규식을 사용합니다.

표현식에는 2개의 정규 표현식이 있습니다.

[[:space:]]- 개행 문자를 포함한 모든 공백 문자와 일치합니다.

? - optional

+- 한 번 이상.

따라서 sed 명령은 --updated와 하나 이상의 공백 문자 및 날짜와 일치하는 모든 줄을 삭제하지만 d는 ? 문자 때문에 선택 사항입니다. 좋다:

--Updated Date: 2013-11-06 15:32:13
--Updated   Date: 2013-11-06 15:32:13
--Updated           Date: 2013-11-06 15:32:13
--Update Date: 2013-11-06 15:32:13

답변2

POSIX 기본 정규식을 사용하여 이를 수행하기 위해 내가 얻을 수 있는 가장 가까운 것은 다음과 같습니다.

sed '/--Updated*[[:space:]][[:space:]]*Date/d' inputfile

?불행히도 실제 대체 항목 은 없으므로 a를 사용하면 여러 개의 s *와도 일치할 수 있습니다 . d그러나 a 를 두 번째로 사용하여 +단순히 패턴을 반복하여 대체할 수 있습니다 .*

고쳐 쓰다

실제로 표현식 확장과 동일한 효과를 얻는 방법은 두 가지 패턴을 사용하는 것입니다.

sed \'
  /--Updated[[:space:]][[:space:]]*Date/d
  /--Update[[:space:]][[:space:]]*Date/d
  ' inputfile

답변3

cygwin에서 gnu sed 4.2.2를 사용하여 -r플래그를 추가합니다.

 '--Updated Date: 2013-11-06 15:32:13'|sed -r -e '/--Updated?[[:space:]]+Date/d'

출력이 인쇄되지 않습니다. -r확장 정규식을 켜면 예상대로 작동 ?합니다 . +이것확장 정규식 참조내가 가장 많이 사용하는 점은 기본 정규식(기본값)에서 특별한 의미를 갖기 위해서는 앞에 백슬래시가 있어야 ?한다는 것입니다 .+

관련 정보