Schrift
[thread]8892[/thread]

Datei in eine Zeile ausgeben: '$1', '$2', ...: Perl-Einzeiler (Seite 2)

Leser: 1


<< |< 1 2 >| >> 19 Einträge, 2 Seiten
Duff
 2007-03-30 15:02
#75560 #75560
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Nochmals ein Dankeschön.

Der Befehler mit der | und dann den perl-Einzeiler funktioniert aber nur bei einem echo und nicht bei einem cat auf eine Datei.

Auch der Einzeiler zum Ausgeben der ACSII-Tabelle von renee funktioniert bei mir so nicht.
D'OH
Daniel
Linuxer
 2007-03-30 15:38
#75561 #75561
User since
2006-01-27
3882 Artikel
HausmeisterIn

user image
Beide Variante (mit cat $file | ) und Eingabeumleitung aus Datei arbeiten bei mir wie erwartet:
Code: (dl )
1
2
3
4
5
perl -pe "s/^(\d+)\n/'\$1', /g" < data.txt 
'12345678', '91234567', '89123456', '78912345', '67891234', '56789123',

cat data.txt | perl -pe "s/^(\d+)\n/'\$1', /g"
'12345678', '91234567', '89123456', '78912345', '67891234', '56789123',
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Duff
 2007-03-30 15:52
#75562 #75562
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Stimmt, ich hatte das Umlenkungszeichen < zum Einlesen der Datei vergessen. Hatte die Datei nur einfach hinter den Perl-Befehl gestellt.

So geht es natürlich auch...
D'OH
Daniel
Linuxer
 2007-03-30 16:27
#75563 #75563
User since
2006-01-27
3882 Artikel
HausmeisterIn

user image
Es muß auch ohne das < arbeiten... Bei mir tut es das auch:

Code: (dl )
1
2
perl -pe "s/^(\d+)\n/'\$1', /g" data.txt 
'12345678', '91234567', '89123456', '78912345', '67891234', '56789123',


"funktioniert nicht" ist natürlich eine sehr präzise Fehlerbeschreibung, auf deren Basis man gut weiterhelfen kann ;o))
Wenn Du weitere Hilfe brauchst, wirst Du wohl die "Nicht-Funktion" näher beschreiben müssen!

[edit]Sonderzeichen vereinheitlicht[/edit]\n\n

<!--EDIT|Linuxer|1175257686-->
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
betterworld
 2007-03-30 16:41
#75564 #75564
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Code: (dl )
perl -p -e 's/^(\d+)\n/"'\''$1'\''"/e'
Duff
 2007-03-30 17:07
#75565 #75565
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Mmh...scheinen nun doch beide Varianten zu funktionieren. Muss ich wohl vorher irgendwas falsch gemacht haben.

Habe noch was, und zwar würde ich nun gerne nach dem letzten ' das , entfernen.

Sollte doch eigentlich über einen weiteren -e Schalter funktionieren, oder?
Oder muss ich dann doch auf ein anderes Werkzeug zurück greifen, wie z.B. sed?
D'OH
Daniel
betterworld
 2007-03-30 17:45
#75566 #75566
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=Duff,30.03.2007, 15:07]Sollte doch eigentlich über einen weiteren -e Schalter funktionieren, oder?
Oder muss ich dann doch auf ein anderes Werkzeug zurück greifen, wie z.B. sed?[/quote]
Mehrere -e gibt es tatsaechlich nur bei sed.  Aber so etwas braucht keiner, weil man mehrere Regexps auch einfach mit Semikolon innerhalb eines einzigen -e trennen kann.
Update: Wie ich gerade herausgefunden habe, kann man in Perl auch mehrmals -e angeben, aber ein Semikolon dazwischen braucht man trotzdem.\n\n

<!--EDIT|betterworld|1175262432-->
PerlProfi
 2007-03-30 17:49
#75567 #75567
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
So könntest du es machen:
Code: (dl )
perl -pe "s/^(.*?)(\n)?$/'$1', /; (chop, chop) if eof" t.txt

Das ? hinter \n, falls die Datei nicht mit \n aufhört.

MfG
Duff
 2007-03-30 18:32
#75568 #75568
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Ja, so funktioniert es:
Code: (dl )
perl -pe "s/^(\d+)\n/'\$1', /g; (chop, chop) if eof"


Weiß jetzt auch, was ich vorher falsch gemacht hatte. Im Substitute hatte ich $1 nicht escaped (also \$1).\n\n

<!--EDIT|Duff|1175266628-->
D'OH
Daniel
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2007-03-30 09:58.