Schrift
[thread]13071[/thread]

;;;; ändern zu ;1;1;1;1

Leser: 1


<< >> 5 Einträge, 1 Seite
leo11
 2009-01-28 20:29
#118445 #118445
User since
2008-08-14
250 Artikel
BenutzerIn
[default_avatar]
Hallo,

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#! /usr/bin/perl
use strict;
use warnings;

while (<DATA>)  {
    s{;;}
    {;1;}xmsg;
    print;
}

__DATA__
;;;;
;;;;

gibt folgendes aus:
Code: (dl )
1
2
;1;;1;
;1;;1;


Wie bekomme ich auf einen Streich:
Code: (dl )
1
2
;1;1;1;
;1;1;1;


---

Noch eine 2te Frage:
wie kann ich nach etwas suchen und dann ersetzen durch $1 gefolgt von einer 1, gefolgt von $2?
Bsp.:
Code (perl): (dl )
1
2
s{(;)(;)}
    {$11$2}


Probiert hab ich bisher:
{$1\1$2}
und
{$1 1 $2}x

Beides brachte nicht das gewünschte Ergebnis. D.h. bspw. $1 enthält 2 ebenso wie $2, dann sollte folgendes gesetzt werden:
212
Linuxer
 2009-01-28 20:36
#118446 #118446
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Hi,

meine Vorschläge:

zu 1.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
#! /usr/bin/perl -l
use strict;
use warnings;

while ( <DATA> ) {
  chomp;
  # nur anwenden, wenn die Zeile nur aus ';' besteht
  $_ = join( 1, split // ) if ( m/\A;+\z/ );

  print $_;  # beachte Option -l
}


zu 2.
Code (perl): (dl )
s{(;)(;)}{${1}1${2}}g;
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!
moritz
 2009-01-28 20:51
#118448 #118448
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
leo11+2009-01-28 19:29:13--
Wie bekomme ich auf einen Streich:
Code: (dl )
1
2
;1;1;1;
;1;1;1;


Mit look-ahead z.B.

Code: (dl )
1
2
3
$ perl -wlpe 's/(;)(?=;)/;1/g'
;;;;
;1;1;1;


Die Regex kann man lesen als "ersetze jedes ';', das von einem weiteren ';' gefolgt wird, durch ein ';1'".
leo11
 2009-01-28 21:24
#118449 #118449
User since
2008-08-14
250 Artikel
BenutzerIn
[default_avatar]
Ok, danke.
LanX-
 2009-01-29 03:02
#118461 #118461
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
du kannst auch die Substitution in ner Schleife wiederholen:
Code (perl): (dl )
1
2
3
4
5
6
  DB<4> $_=";;;;;;"

  DB<5> 1 while s/;;/;1;/

  DB<6> print
;1;1;1;1;1;

die 1 ist nur ein NOP!
<< >> 5 Einträge, 1 Seite



View all threads created 2009-01-28 20:29.