나는 다음과 같은 정규식을 생각해 냈습니다.
\[release(\s+(?<release_type>.*))?\]\n+(?<release_notes>.*)
아이디어는 여러 매개변수에 대한 커밋 메시지를 구문 분석하는 것입니다.
[release minor]
Hello world
- asd
- zxc
일치 결과는 release_type = 'minor'
, 입니다 release_notes = 'Hello world\n…
.
macOS의 오래된 정규식 엔진으로 인해 Perl을 사용하려고 합니다.
난 노력 했어:
perl -e 'print "$+{release_notes}" while /\[release(\s+(?<release_type>.*))?\]\n+(?<release_notes>.*)/gs;' msg.txt
그런데 어떤 이유에서인지 이 표현은 예상대로 작동하지 않습니다.
사실 더 간단해도
perl -ne 'print "$+{release_notes}" while /\n(?<release_notes>.*)/gs;' msg.txt
실패합니다.
이것
perl -ne 'print "$+{release_notes}" while /(?<release_notes>.*)/gs;' msg.txt
성공하고 전체 입력을 반환합니다.
아마도 여기에 간단한 것이 빠졌을 것입니다. 그러나 그것이 무엇인지는 확실하지 않습니다.
답변1
이 답변나에게 해결책을 제시해 주세요. -0777
명령에 추가하면 문제가 해결됩니다.
인용하자면:
현재에도 여전히 그런 기능이 필요합니다.
-0777
설정을 해제합니다.입력 레코드 구분 기호, 따라서 파일을 한 번에 읽습니다. 보다 https://stackoverflow.com/questions/37582501/why-use-the-pn-in-slurp-mode-in-perl-one-liner/37583183#37583183