Thread Linux anonymisierer
(35 answers)
Opened by sd911 at 2016-09-19 08:10
Eine Möglichkeit wie ein solches Perl-Programms aussehen kann:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 #!/usr/bin/perl ### Notwendige Module laden use strict; # überprüfe programm vor ablauf strikt auf Fehler use warnings; # und gib auch Fehler aus use utf8; # erlaube UTF-Zeichen in Quelltext ### Modul für das Erfassen der Kommandozeilenparameter deklarieren use Getopt::Long; ### Variablen deklarieren my $name; my $prename; my $filename; ### Ersatzstring aus 50mal Zeichen '-' definieren my $c50 = '-' x 50; ### Unterprogramm für Hilfetext definieren sub help { print <<TXT; !!!! FEHLER !!!! Aufruf: ReName -p "Vorname" -n "Name" -f "Dateiname" Notwendige Parameter sind: -p oder -n und -f Folgende Parameter sind gültig: -p für Vorname --vorname -n für Name --name --datei für Dateinamen der Eingabedatei -f TXT exit 255; # Programmabbruch } ### Art der Kommandozeilenparameter definieren my %opts = ( 'vorname|p=s' => \$prename, # Parameter Vorname als String 'name|n=s' => \$name, # Parameter Name als String 'datei|f=s' => \$filename # Parameter Dateiname der einzulesenden Datei als String ); ### Parameter einlesen GetOptions(%opts); ### Vorhandensein der Parameter prüfen if ( not defined($name) and not defined($prename) ) { help(); # bei fehlenden Parametern Hilfe anzeigen } ### Eingabedatei öffnen my $in_fh; open $in_fh, '<', $filename # im Lesemodus öffnen or die "Datei '$filename' kann nicht geöffnet werden: $!" ; # bei Fehlschlag Fehler ausgeben ### Ausgabedatei öffnen my $out_fh; my $out_filename = "$filename.tmp"; # temporärer Dateiname open $out_fh, '>', $out_filename # im Schreibmodus öffnen or die "Datei '$out_filename' kann nicht erzeugt werden: $!" ; # bei Fehlschlag Fehler ausgeben flock $out_fh, 0; # Datei gegen mehrfachen Zugriff sperren ### Eingabedatei einlesen while ( my $line = <$in_fh> ) { # Zeilenweise in Variable $line einlesen if (length $name # falls Parameter $name vorhanden and $line =~ /#\Q$name\E\s*Name#/ ) # und $name mit möglichen nachfolgenden Leerzeichen in $line vorhanden { $line =~ s/#\Q$name\E\s*Name/#${c50}Name/ ; # ersetze das Vorkommen durch den Ersatzstring } if (length $prename # falls Parameter $prename vorhanden and $line =~ /#\Q$prename\E\s*Vorname#/ ) # und $prename mit möglichen nachfolgenden Leerzeichen in $line vorhanden { $line =~ s/#\Q$prename\E\s*Vorname/#${c50}Vorname/; # ersetze das Vorkommen durch den Ersatzstring } print $out_fh $line; # speichere neue Zeile in Ausgabedatei } ### Eingabedatei schließen close $in_fh or die "Datei '$filename' kann nicht geschlossen werden: $!"; # bei Fehlschlag Programmabbruch mit Fehlermeldung ### Ausgabedatei schließen close $out_fh or die "Datei '$out_filename' kann nicht geschlossen werden: $!"; # oder bei Fehlschlag Programmabbruch mit Fehlermeldung # alte Eingabedatei löschen unlink $filename or die "Datei '$filename' kann nicht gelöscht werden!"; # Ausgabedatei in Dateinamen der Eingabedatei umbenennen rename ($out_filename, $filename) # umbenennen or die "Datei '$out_filename' kann nicht in '$filename' umbenannt werden!"; # oder Programmabbruch mit Fehlermeldung 1; Ließe sich auch noch anders machen oder erweitern. Frage bitte wenn was nicht klappt. /EDIT: Ich weiß allerdings nicht wie deine Datei wirklich aufgebaut ist. kann sein, dass ich deine umgangsprachlich beschriebene Datenzeile falsch interpretiert habe. Last edited: 2016-09-19 11:48:04 +0200 (CEST) View full thread Linux anonymisierer |