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