Ich muss den LGPL-Lizenz-Header in allen meinen Java-Quelldateien durch den Apache License 2.0-Header ersetzen, d. h. durch diesen
%Vor%muss
werden %Vor% Ich dachte mir, der einfachste Weg wäre, sed zu benutzen, um einen Fund zu finden und alle Vorkommen dieses Copyright-Headers zu ersetzen. Ich bin ein bisschen wie ein Unix-Neuling, daher hatte ich Probleme, den Befehl so zu bekommen, wie ich es brauchte - insbesondere mit den mehrzeiligen Strings umzugehen. Grundsätzlich so etwas wie unten, mit Ausnahme der jeweiligen Header anstelle von foo
und bar
:
Ich verstehe, dass sed immer auf einer Zeile arbeitet, also gibt es vielleicht eine bessere Lösung?
Der Befehl c
ändert den Zeilenbereich in den angegebenen Text. Der Bereich wird durch die Zeile "Project Foo ist freie Software" bis zur Zeile mit "zusammen mit Project Foo" gekennzeichnet.
Die -i
-Option zu sed
gibt an, dass GNU sed
; Daher nehme ich an, dass Sie auch GNU find
und xargs
verwenden und -print0
und -0
verwenden, um Probleme mit Leerzeichen in Dateinamen usw. zu vermeiden.
Dafür könnte ich versucht sein, das Skript sed
in eine Datei ( sed.script
) zu schreiben, die dann mit:
Das ist besser, denke ich, aber Schönheit liegt im Auge des Betrachters.
Nur eine Frage: Die Ausrichtung ist auf den Sternen ein wenig aus. Gibt es eine Art Leerzeichen, das ich verwenden muss, um sie einzurücken? Ich habe versucht, Leerzeichen zu der Ersatzzeichenfolge hinzuzufügen, aber das schien keine Wirkung zu haben.
Grrr ... das ist die Art von Verärgerung, auf die ich verzichten könnte (und Sie auch). Es scheint, dass führende Leerzeichen in den Datenzeilen "Ändern" um sed
fallen gelassen werden. Es scheint sed
zu sein anstatt bash
; Ich habe das gleiche Ergebnis mit ksh
und auch eine Skriptdatei anstelle der Option -e
in der Befehlszeile verwendet. Sie können die Änderungsdaten nicht bearbeiten, während sie ausgegeben werden.
Ein Trick, der funktionieren würde - aber Sie sind vielleicht nicht scharf darauf:
%Vor% Das Programm s2p
ist ein Standardteil der Perl-Distribution, der sed
-Skripte in Perl-Skripte konvertiert, aber die führenden Leerzeichen in den Ersatzdaten behält. Ich bin nicht scharf darauf, aber die einzige Alternative, die ich mir vorstellen kann, ist, zwei Durchgänge durch jede Datei zu machen. Die Ersatzdaten könnten sein:
Nachdem Sie den Haupttext ersetzt haben, tun Sie Folgendes:
%Vor% Dies verfolgt die Zeilen beginnend mit @*@
und ersetzt diesen Text durch ' *
' (Leerzeichen-Stern). Nicht so sauber und ordentlich, aber das wirst du nicht allzu oft tun, vertraue ich.
Sie können GNU sed verwenden, um dies mit einigen Übereinstimmungen mit regulären Ausdrücken und einem Leseausdruck zu lösen. Hier sind die Schritte.
Erstellen Sie zuerst eine Datei, die den Ersatzteil Ihrer Lizenz enthält:
%Vor%Als nächstes führen Sie find aus, um Ihre Dateiliste zu sammeln, und rufen Sie das folgende sed Skript auf, um die Änderungen vorzunehmen:
%Vor%Diese Lösung funktioniert möglicherweise nicht mit anderen Versionen von sed, wurde aber lokal getestet und funktioniert bekanntermaßen mit GNU sed Version 4.2.1. Wenn es nicht mit der Version von sed funktioniert, die mit Ihrer Edition von OS X geliefert wurde, können Sie GNU sed über MacPorts oder ähnlich installieren.
Angenommen, Datei1 enthält Ihren Originaltext und Datei2 enthält Ihren Ersatz-Copyright-Kommentar:
%Vor%Der obige Text sucht nur nach der ersten Kommentarzeile in der Originaldatei. Wenn er gefunden wird, wird die Ersatzdatei gefunden und für den Rest der Originaldatei gedruckt.
Tags und Links command-line macos licensing sed unix