정규식이 일치하지 않음

정규식이 일치하지 않음

이게 왜 안맞아..?

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 및 하나 이상의 공백 문자 및 Date와 일치하지만 ? 때문에 일치하는 모든 줄을 삭제합니다. 문자 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

불행하게도 를 실제로 대체할 수 있는 것이 없으므로 여러 s와도 일치하는 ?a 가 사용됩니다 . 그러나 두 번째 반복에는 a를 사용하여 패턴을 간단히 반복함으로써 대체할 수 있습니다 .*d+*

업데이트

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

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확장 정규 표현식을 켜면 예상대로 작동합니다 ?. +그만큼확장 정규식에 대한 참조나는 대부분의 점을 사용하며 ?특별한 +의미를 갖기 위해서는 기본 정규 표현식(기본값)에 앞에 백슬래시가 있어야 합니다.

관련 정보