perl expression

opino

opino

Tripel-As
folgendes beispiel stammt von der rename manpage:

rename 's/\.bak$//' *.bak

ich verstehe die Per expression nicht.

s/ soll sicherlich suchen sein.
was bedeutet \.bak
was macht die variable dort?
was bedeuten die zwei \\ am ende?

wie muss die Expression lauten wenn ich die dateien v1.txt v2.txt v3.txt in l1.txt l2.txt und l3.txt umbennenen will.
 
s bedeutet suche und ersetze, in der Art:

Code:
s/muster/replace/

\.bak$ bedeutet: matche alles, was mit .bak endet. Der Punkt hat in den reg. exp. eine besondere Bedeutung und muss deshalb escaped werden. $ bezeichnet keine Variable, sondern das Ende des Strings. Es werden also .bak am Ende der Filenamen abgeschnitten.

Gruss, Xanti

edit: Bez. Deiner Rename-Anfrage müsste der reg. Ausdruck : 's/^v/|/' lauten. Aber im Ernst, Du willst doch nicht etwa eine Pipe in die Filenamen friemeln?
 
Zuletzt bearbeitet:
Aber im Ernst, Du willst doch nicht etwa eine Pipe in die Filenamen friemeln?

danke für die schnelle antwort.

ehrlich gesagt weiss ich nicht wie man es am elegantesten löst.
Ich wollte einen einzeiler machen da dachte ich mit rename.
ich habe noch diese möglichkeit mit for schleife gefunden aber da sind auch auch perl ausdrücke drin deswegen fragte ich was die bedeuten.

Also neme ich an for schleife ist besser?
 
Keine Ahnung, was da besser ist, da ich nicht weiss, was Du machen willst.
 
also ich bin gerade total am verzweifeln.
mein problem: ich habe dateien
versuch1.txt
versuch2.txt
versuch3.txt
versuch4.txt

daraus soll werden
latex_tb_1.tex
latex_tb_2.tex
latex_tb_3.tex

Ich verstehe das mit den Wildcards bei rename nicht.
Warum geht nicht rename versuch*.txt latex_tb*.tex?

Bitte sag nich das ist ein anfänger fehler, das hatte ich heute schon.
 
Wildcard und Regexp

Ich verstehe das mit den Wildcards bei rename nicht.
Warum geht nicht rename versuch*.txt latex_tb*.tex?
Hallo,

beim rot eingefärbten Stern ist in dem Befehl nicht klar, was hin soll, das könnte sonstwas sein, du willst aber eine konkrete Zahl.

Ich würde in Perl alle txt-Namen in ein Array packen, in einer Schleife die Nummer hochzählen und dabei den jeweiligen Tex-Namen ausgeben. Ist ja total schematisch auf beiden Seiten, nur die Nummer ändert sich.

[Edit]
Zu regulären Ausdrücken:
Überhaupt ist die Perl-Einführung von Selfhtml eine lesenswerte Sache.
 
Zuletzt bearbeitet:
Hallo
Das geht sogar viel schneller und eleganter mit der Shell, wenn du Bash oder Ksh benutzt.
Code:
for i in $(seq 4); do mv versuch${i}.txt latex_tb_${i}.tex ;done


Gruß Wolfgang
 
...
versuch1.txt
versuch2.txt
versuch3.txt
versuch4.txt

daraus soll werden
latex_tb_1.tex
latex_tb_2.tex
latex_tb_3.tex

...

<Dummschwätz>
Deine Abbildung ist nicht injektiv. ;)
</Dummschwätz>

Auch wenn Wolfgang bereits eine Lösung präsentiert hat, will ich noch die Möglichkeit mit rename angeben:

Code:
rename 's/^versuch(\d+).txt/latex_tb_$1.tex/' versuch*.txt

Gruss, Xanti
 
Zuletzt bearbeitet:

Ähnliche Themen

Squid nur zum maskieren der eigenen IP, nicht für Webserver auf port 80

[openSuse10.2] SATA mal wieder...

CGI laesst sich nicht ausfuehren

Zurück
Oben