다른 질문에 대답한 후 놀다가 sed
발견했는데 동일한 결과가 나오지 않습니다 .+
..*
둘 다 여러 문자와 일치하는 경우컨텍스트 주소에서.
아래 명령 1 :
sed -E '$!N;/(.+)\n\1/!P;D' <<IN
one
one_more
two
two_more
IN
인쇄
one_more
two_more
좋아요, 이것이 예상되는 결과입니다.
정규 표현식을 에서 .+
( .*
즉, 에서하나 이상의 문자도착하다0개 이상의 문자)는 동일한 결과를 제공해야 하지만 다음과 같은 결과는 그렇지 않습니다.
sed -E '$!N;/(.*)\n\1/!P;D' <<IN
one
one_more
two
two_more
IN
한 줄만 인쇄
two_more
여기서 무슨 일이 일어나고 있는 걸까요?
1: 단순성과 가독성을 위해 ERE를 사용하고 있습니다. BRE에서도 마찬가지입니다.
답변1
이는 /(.*)\n\1/
간단한 개행 문자도 일치하기 때문에 발생합니다( \n
: 빈 문자열, 개행 문자, 그 다음에동일한처음부터 시작하는 것은 빈 문자열입니다).
one_more\ntwo
따라서 귀하의 예에서도 문자열과 일치합니다.
sed -E '$!N;/^(.+)\n\1/!P;D'
이를 방지하려면 또는 같은 정규식을 고정해야 합니다 sed -E '$!N;/^(.*)\n\1/!P;D'
.