Schrift
[thread]9225[/thread]

Perleinzeiler

Leser: 1


<< |< 1 2 >| >> 12 Einträge, 2 Seiten
Duff
 2007-07-25 15:33
#78833 #78833
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Hallo,

komme irgendwie nicht weiter und finde meinen Denkfehler noch nicht.

Ich habe ein kl. Skript:
Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl -w
use strict;

while(<>) {
if ($_ =~ m/^\w+(.*)\)$/g) {
print $1,"\n";
}
}


und die Datei:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
bdl bal 0912 91u2u3 kj 33 9)
bdl bal 0912 91u2u3 kj 33 9)
21jbdl bal 0912 91u2u3 kj 33 900
bdl bal 0912 91u2u3 kj 33 9)
. bdl bal 0912 91u2u3 kj 33 9)

bdl bal 0912 91u2u3 kj 33 9)
2jbdl bal 0912 91u2u3 kj
?bdl bal 0912 91u2u3 kj 33 9)
bdl bal 0912 91u2u3 kj 33 9)kajkljk kj
78bdl bal 0912 91u2u3 kj 33 9)9
bdl bal 0912 91u2u3 kj 33 9)


Wenn ich nun das Skript auf die Datei ausführe, erhalte ich:
Code: (dl )
1
2
3
4
5
 bal 0912 91u2u3 kj 33 9
bal 0912 91u2u3 kj 33 9
bal 0912 91u2u3 kj 33 9
bal 0912 91u2u3 kj 33 9
bal 0912 91u2u3 kj 33 9


Soweit, so gut. Ich möchte aber solche "einfachen" Sachen lieber als perl-Einzeiler schreiben, wie z.B.
Code: (dl )
perl -ne 's/^\w+(.*)\)$/$1/g' test.txt


Das funktioniert allerdings nicht. Wo liegt mein Denkfehler???
D'OH
Daniel
renee
 2007-07-25 15:49
#78834 #78834
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
C:\>perl -lne "print $1 if m/^\w+(.*)\)$/" test.txt
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
jubei
 2007-07-25 16:18
#78835 #78835
User since
2007-07-19
22 Artikel
BenutzerIn
[default_avatar]
Quote
Code: (dl )
perl -ne 's/^\w+(.*)\)$/$1/g' test.txt


wenn du wirklich substituieren willst (im Sinne von infile replacement), dann kannst du auch

Code: (dl )
perl -p -i -e 's/^\w+(.*)\)$/$1/' test.txt


verwenden. dann allerdings wird 1) test.txt überschrieben 2) enthält (das neue) test.txt auch alle zeilen, die nicht matchen.

und noch eine anmerkung zum g modifier. der ist in deinen beiden codebeispielen überflüssig. zum einen kann ein ausdruck der in ^ und $ eingeschlossen ist sowieso höchstens einmal pro Zeile matchen (wenn man $/ umdefiniert muss man dann zumindest noch zusätzlich den m modifier verwenden), außerdem macht bei "reinem matching" (also ohne substitution) /g auch nur in einer while-schleife sinn.\n\n

<!--EDIT|jubei|1185366104-->
Duff
 2007-07-25 16:30
#78836 #78836
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Ich möchte nur die Treffer ausgegeben bekommen und nicht zusätzlich die Datei durch -i verändern.

Das Beispiel von renee gibt allerdings zu viel aus:
Code: (dl )
1
2
3
4
5
bdl bal 0912 91u2u3 kj 33 9)
bdl bal 0912 91u2u3 kj 33 9)
bdl bal 0912 91u2u3 kj 33 9)
bdl bal 0912 91u2u3 kj 33 9)
bdl bal 0912 91u2u3 kj 33 9)
D'OH
Daniel
renee
 2007-07-25 17:01
#78837 #78837
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wieso gibt meins zu viel aus? Das sind genau die 5 Zeilen, die in deinem oben geposteten Dateiausschnitt auf den Ausdruck matchen??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
jubei
 2007-07-25 17:04
#78838 #78838
User since
2007-07-19
22 Artikel
BenutzerIn
[default_avatar]
@duff: nimm mal single-quotes. bei double quotes macht die shell ja meist noch etwas "string magic"...
jubei
 2007-07-25 17:11
#78839 #78839
User since
2007-07-19
22 Artikel
BenutzerIn
[default_avatar]
mit ner *nix shell muesste das mit double quotes wohl so aussehen:

Code: (dl )
perl -ne "print \$1,\$/ if m/\\w+\\s+(.*)\\)\$/" test.txt
renee
 2007-07-25 17:15
#78840 #78840
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Bei *NIX einfach die " durch ' ersetzen... Unter Win32 ist es halt "...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Duff
 2007-07-25 17:22
#78841 #78841
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Ups, ja so funktioniert es.

Danke.
D'OH
Daniel
jubei
 2007-07-25 17:25
#78842 #78842
User since
2007-07-19
22 Artikel
BenutzerIn
[default_avatar]
klar sollte man single quotes benuzen (hab ich ja auch geschrieben), das beispiel mit den double quotes war auch nur illustrativ...
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2007-07-25 15:33.