Thread perl one liner : string suchen und ersetzen wert (unix) (17 answers)
Opened by bora99 at 2012-05-08 15:07

FIFO
 2012-05-09 20:06
#158259 #158259
User since
2005-06-01
469 Artikel
BenutzerIn

user image
2012-05-09T17:34:49 bora99
Auch ein Versuch einer Erweiterung ist , daß es variabel für 5 parameter gestaltet werden kann, wie man es flexibel für zig werte gestalten kann, hmmm, weiß ich nicht.

zu guter Letzt, wie kann man Gross / Kleinbuchstaben von Eintrag ignorieren, wie "Eintrag" , "eintrag"


Hi, auf die Schnelle schon mal:
- case-independent matching: s/($key\s*=\s*)[^#\s]+/$1$changes{$key}/i.
Wenn Du das Groß-Klein-Ignorieren nur für den key ('eintrag...') aktivieren willst, musst Du den i-Modifier in die Capture-Gruppe schreiben:
s/((?i)$key\s*=\s*)[^#\s]+/$1$changes{$key}/
edit: Bei dieser RegEx spielt der Unterschied keine Rolle, ist nur zur Vervollständigung der i-Erklärung.

- Die Parameterübergabe würde ich eher so machen:
USAGE: myscript FILE eintrag=wert eintrag2=wert2 ...
Dann hast Du 1. nach hinten Platz, 2. ist die Schlüssel-Wert-Zuweisung klarer und 3. kannst Du die Argumente simpel in einer Schleife parsen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
my ($file, @args) = @ARGV;
die "gib mich datei" unless $file;

my %changes;

for my $arg (@args) {
    my ($key, $value) = split('=', $arg);
    die "doofes argument" unless ($key and $value);
    $changes{$key} = $value;
}


Im echten Leben natürlich mit gescheiter Fehlerprüfung und Misstrauen gegenüber den User-Eingaben :)
Muss aktuell weg und versuche später, die Sache mit den Links zu verstehen ...

Gruß FIFO

edit: Wenn es 'zig' Parameter sind, ist die Kommandozeile nicht Dein Freund, pack die parameter=wert-Paare z.B. in ein Textfile.
Last edited: 2012-05-09 20:20:21 +0200 (CEST)
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"

View full thread perl one liner : string suchen und ersetzen wert (unix)