sed 일치는 항상 탐욕적입니까?
저는 sed를 사용하여 XML 선언(있는 경우) 뒤에 가능한 한 빨리 XML 파일에 XML 주석을 추가하려고 합니다. 쉘 환경에서는 다음과 같습니다.
sed -e 's/\(<?xml[^?]*?>\)\?$/\1<!-- This is the new comment -->/'
나는 sed가 가장 왼쪽의 일치 항목을 찾고 일치가 시작되는 가장 왼쪽 위치에서 가능한 한 탐욕스러워지기를 원한다는 것을 알고 있습니다. 그러나 선택적 그룹은 아래와 같이 XML 선언과 일치하지 않습니다.
<?xml version="1.0" encoding="utf-8"?>
대신 빈 문자열과 일치하도록 선택하므로 주석이 XML 선언 앞에 추가됩니다. 왜 그런 겁니까?
그룹을 강제로 설정하면 예상대로 일치합니다.
답변1
아. 문서는 UTF-8 BOM으로 시작됩니다.
따라서 빈 문자열 일치는 BOM 이전에 발생하며 BOM 이후의 "예상" 일치는 가장 왼쪽의 가능한 일치가 아닙니다.