PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Frage] Regular Expressions



emba
04.06.03, 16:58
hi

hoffentlich bin ich im richtigen forum

suche eine reg exp für das tool sed, damit ich folgendes realisieren kann

habe eine zeichenkette

c:\lalala\jijaij\xxxxx xxxx.lnk

xxx steht für eine beliebige zeichenkette mit evtl. leerzeichen
sie endet immer mit lnk

nun möchte ich diese zeichenkette ab dem letzten \ bis einschließlich dem .lnk entfernen

wie realisiere ich das mit reg ex?

ziel: pfadnamen zu der datei extrahieren

wäre sehr dankbar für vorschläge

greez

Der Gestreifte
04.06.03, 17:08
Muss es "sed" sein?
Ansonsten probier mal "echo "c:\lalala\jijaij\xxxxx xxxx.lnk"|cut -d\\ -f1-3"

Oxidative
04.06.03, 17:34
weiß nicht ob dir das was bringt aber in perl würde das ungefähr so aussehen:

perl -e "$string = '/home/michael/test.lnk'; $string =~ s/^(.*)\/(?:.*?).lnk$/$1/ig; print $string;"

emba
04.06.03, 17:36
nein, muss net unbedingt sed sein

hab deins versucht
schon ganz gut, nur leider können die verzeichnistiefen unterschiedlich sein (was ich hätte reinschreiben sollen)

sprich: es müssen nicht immer 3 trennstriche sein
deswegen macht sich das mit cut bissl doof, da man immer nie weiß, wieviel felder man denn nun hat (soll in einem script mit vorher unbekannter verzeichnistiefe verwendet werden)

thx
greez

emba
04.06.03, 17:42
@oxidative

hab das ma in ein script gepackt


#!/usr/bin/perl

my $string = "c:\test\test\test.lnk";

$string =~ s/^(.*)\/(?:.*?).Ink$/$1/g; print $string;
print "\n";

ergebnis:

linux:~ # ./test.pl
c: est est est.lnk

:(

greez

Oxidative
04.06.03, 17:45
ah sorry hab an linuxpfade gedacht, du musst also das / durch \ ersetzen:


#!/usr/bin/perl

my $string = "c:\test\test\test.lnk";
$string =~ s/^(.*)\\(?:.*?)\.lnk$/$1/ig;
print $string . "\n";

emba
04.06.03, 17:50
geht leider auch nicht


linux:~ # ./test.pl
c: est est est.lnk

ich vermute es liegt hier dran
s/^(.*)\\(?:.*?)

denn er verschluckt ja jeden "\T" - String

bin leider mit regex net so fit...

wäre sehr dankbar, für jede weitere hilfe !!!

greez

Belkira
04.06.03, 17:51
sed 's!\\[^\\]*.lnk!!'

Oxidative
04.06.03, 17:56
ok dass sollte jetzt endlich auch funzen:

#!/usr/bin/perl

my $string = 'c:\test\test\test.lnk';
$string =~ s/^(.*)\\(?:.*?)\.lnk$/$1/ig;
print $string . "\n";

emba
04.06.03, 17:56
@oxi

output:


linux:~ # ./test.pl
c: est est est.lnk
:(

:D

@ belkira

das scheint zu funzen
was genau bedeutet die syntax?
danke...

hat jmd. eine sehr gute referenz-man zu reg exp?

BIG THX

greez

Oxidative
04.06.03, 17:59
Perl Tutorial: http://www.perldoc.com/perl5.8.0/pod/perlre.html

bist du sicher, dass du die " durch ' ersetzt hast?

emba
04.06.03, 18:05
@oxi...

*ggggggggggggggggggg

klappt, weiß net warum auf einmal :rolleyes:

THX

Belkira
04.06.03, 18:07
man 7 regex

panzi
04.06.03, 18:52
hmm, im vim würd ich folgendes schreiben:

:%s/^\(.*\\\)[^\\]*$/\1/
(ersetze in allen zeilen den ausdruck zeilenanfang bereich-mit-belibigen-zeichen-und-\-am-ende belibig-oft-nicht-\ zeilenende mit dem bereich)

müsst in sed so gehn:
echo "c:\bla\gwa\xxx xxx.lnk" | sed 's/^\(.*\\\)[^\\]*$/\1/'