Wie benutzt du sed von Perl?

8

Ich weiß, wie man sed mit grep benutzt, aber innerhalb von Perl schlägt das Folgende fehl. Wie kann man sed in einem Perl-Programm arbeiten?

%Vor%     
Alex Wong 04.03.2009, 16:31
quelle

10 Antworten

8

Ich bin überrascht, dass niemand das s2p Dienstprogramm erwähnt, das sed "Skripte" übersetzt (Sie wissen, die meisten von die Zeit oneliner) zu gültigen Perl. (Und es gibt ein a2p Dienstprogramm für awk auch ...)

    
Zsolt Botykai 04.03.2009, 21:43
quelle
25

Vorschlag: Verwenden Sie reguläre Ausdrücke und Ersetzungen von Perl anstelle von grep oder sed.

Es ist ungefähr die gleiche Syntax, aber mächtiger. Auch am Ende wird es effizienter sein, als den zusätzlichen sed-Prozess aufzurufen.

    
Jason Cohen 04.03.2009 16:34
quelle
12

Alles, was Sie mit grep oder sed tun müssen, kann einfacher in Perl erledigt werden. Zum Beispiel (das ist in etwa richtig, aber wahrscheinlich falsch):

%Vor%     
Paul Tomblin 04.03.2009 16:36
quelle
4

Angeblich hat Larry Wall Perl geschrieben, weil er etwas gefunden hat, was mit sed und awk nicht möglich war. Die anderen Antworten haben dieses Recht, verwenden Sie stattdessen Perl reguläre Ausdrücke. Ihr Code wird weniger externe Abhängigkeiten haben, für mehr Personen verständlich sein (Perls Benutzerbasis ist viel größer als die sed-Benutzerbasis), und Ihr Code wird ohne zusätzliche Arbeit plattformübergreifend sein.

Edit: Paul Tomblin erzählt eine ausgezeichnete Geschichte in seinem Kommentar zu meiner Antwort. Ich lege es hier, um seine Prominenz zu erhöhen.

Henry Spencer, der einige erstaunliche Dinge mit Awk gemacht hat, behauptete, dass Larry, nachdem er Larry Wall etwas Unartiges getan hatte, sagte, er hätte sich nicht mit Perl beschäftigt, wenn er es gewusst hätte. - Paul Tomblin

    
James Thompson 04.03.2009 17:05
quelle
2

Benutze Macht Luke:

%Vor%

Wenn Sie das gleiche denken wollen wie diese langsame und überkomplizierte grep und sed Kombination, können Sie es in Perl selbst viel einfacher und schneller machen:

%Vor%

Oder mit denselben Gedächtnisschuldigen wie die ursprüngliche Lösung

%Vor%     
Hynek -Pichi- Vychodil 04.03.2009 18:53
quelle
1

Wenn Sie einen großen sed -Ausdruck hätten, könnten Sie s2p verwenden, um ihn in ein perl -Programm umzuwandeln.

Wenn Sie & lt; s2p 's/^\([0-9]*\)[:].*//p' & gt; ausführen, erhalten Sie Folgendes:

%Vor%

Bei kleinen Ausdrücken nicht unbedingt wert.

    
Brad Gilbert 04.03.2009 21:29
quelle
1

Sie können

verwenden %Vor%

anstelle von

%Vor%

.. Jedoch ..

Diese sind für Kommandozeilen- oder Shell-Skripte gedacht. Da du bereits in einem Perl-Skript bist,  Die richtige Antwort wurde oben von "Paul Tomblin" gegeben.

Viel Spaß, eKerner.com

    
ekerner 26.03.2013 12:34
quelle
0

Bearbeitet: OK, ich habe es jetzt behoben.

%Vor%     
Leon Timmermans 04.03.2009 16:42
quelle
0

So können Sie Perl als Ersatz für Sed verwenden:

Anstelle von:

%Vor%

Verwenden:

%Vor%

Dadurch werden die Dateien an Ort und Stelle geändert und eine Sicherungskopie ( .bak ) jeder geänderten Datei erstellt.

    
rustyx 06.04.2016 09:31
quelle
0

Es ist einfacher, Perl zu verwenden als grep und sed; Siehe eine andere Antwort .

Ihr Code ist fehlgeschlagen, weil Perl die umgekehrten Schrägstriche in Ihrem sed-Code verwechselt hat. Um dies zu verhindern, schreiben Sie Ihren sed-Code in 'a single-quoted Perl string' und verwenden Sie dann \Q$sedCode\E , um den Code in den Shell-Befehl zu interpolieren. (Über \Q...E , siehe perldoc -f quotemeta . Sein üblicher Zweck ist es, Zeichen für reguläre Ausdrücke zu verwenden, aber funktioniert auch mit Shell-Befehlen .)

%Vor%

Gegeben example.txt mit

%Vor%

Die Ausgabe ist 1, 3 .

    
George Koehler 09.11.2017 22:28
quelle

Tags und Links