Benannte Erfassungsgruppen über die Befehlszeile

Benannte Erfassungsgruppen über die Befehlszeile

Ich habe mir den folgenden regulären Ausdruck ausgedacht:

\[release(\s+(?<release_type>.*))?\]\n+(?<release_notes>.*)

Die Idee besteht darin, eine Commit-Nachricht nach mehreren Parametern zu analysieren:

[release minor]

Hello world

- asd
- zxc

Das Ergebnis der Übereinstimmung sollte release_type = 'minor', sein release_notes = 'Hello world\n….

Ich versuche, Perl zu verwenden, da macOS alte Regex-Engines hat.

Ich habe es versucht:

perl -e 'print "$+{release_notes}" while /\[release(\s+(?<release_type>.*))?\]\n+(?<release_notes>.*)/gs;' msg.txt

Aber aus irgendeinem Grund funktioniert dieser Ausdruck nicht wie erwartet.

Tatsächlich sogar die einfacheren

perl -ne 'print "$+{release_notes}" while /\n(?<release_notes>.*)/gs;' msg.txt 

schlägt fehl.

Das

perl -ne 'print "$+{release_notes}" while /(?<release_notes>.*)/gs;' msg.txt 

ist erfolgreich und gibt einfach die gesamte Eingabe zurück.

Wahrscheinlich übersehe ich hier etwas Einfaches, bin mir aber nicht sicher, was es ist.

Antwort1

Diese AntwortGeben Sie mir eine Lösung: Das Hinzufügen -0777zum Befehl behebt das Problem.

Zitieren:

Das ist auch weiterhin notwendig, auch wenn die-0777hebt dieEingabedatensatz-Trennzeichen, sodass die Datei sofort gelesen wird; siehe https://stackoverflow.com/questions/37582501/why-use-the-pn-in-slurp-mode-in-perl-one-liner/37583183#37583183

verwandte Informationen