/ / Perl: Stimmen Sie einen String ab und löschen Sie alles außer dem ersten Vorkommen - Regex, Perl

Perl: Entspricht einem String und löscht alle außer dem ersten Vorkommen - regex, perl

Ich habe eine Datei in Perl, die folgenden Inhalt hat

abc
text1
text2
text3
abc
text4
text5
abc
abc

Endgültige Ausgabe:

abc
text1
text2
text3
text4
text5

Ich möchte einen Perl-One-Liner oder ein Skript verwenden, um das 1. ABC zu behalten und den Rest zu löschen. In meinem Skript verwende ich den Mustervergleichsoperator m?/abc/ das erste Muster finden, aber keinen Weg finden, den Rest zu löschen. Bitte hilf mir dabei

Antworten:

3 für die Antwort № 1

Angenommen, Sie möchten die gesamte Zeile löschen, die das zweite und nachfolgende Vorkommen von enthält abc:

perl -ne "print if !/abc/ || !$n++" < infile > outfile

Wenn Sie Zeilen löschen möchten, die enthalten abc und sonst nichts, Veränderung /abc/ zu /^abc$/.