Thread perl one liner : string suchen und ersetzen wert (unix)
(17 answers)
Opened by bora99 at 2012-05-08 15:07 2012-05-09T17:34:49 bora99 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"
|