Hallo,
hier mein Vorschlag:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
#!/usr/bin/perl
# vi:ts=4 sw=4 et:
use strict;
use warnings;
#> global variables
#> ----------------------------------------------------------------------------
use vars qw( $str $what $for $pos $last $cnt );
$str  = 'aasdf asdlfa  dasf';   # welcher string soll bearbeitet werden
$what = 'a';                    # was suchen wir
$for  = 'xxx';                  # womit wollen wir es ersetzen
$pos  = 2;                      # das wievielte auftauchen soll ersetzt werden
#> main script
#> ----------------------------------------------------------------------------
( $last, $cnt ) = ( 0, 0 );     # initialisiere counter
# solange wir das gesuchte finden
while ( $last > -1 ) {
    # ermittle position(en) des gesuchten
    $last = index($str, $what, $last);
    
    # ende der schleife, wenn nix mehr gefunden; 
    # oder erhoehe den trefferzaehler
    $last == -1 ? last : $cnt++;
    
    # ersetze in $str das auftreten von $what mit $for
    # wenn die gezaehlten treffer $cnt der gewuenschten anzahl $pos
    # entsprechen
    substr($str, $last, length($what), $for) if ( $cnt == $pos );
    $last++;
}
print $str, $/;
 
 
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!