linux-l: nochmal Perl
Jens Dreger
jens.dreger at physik.fu-berlin.de
Fr Jan 19 01:21:48 CET 2001
On Thu, Jan 18, 2001 at 01:24:05PM +0100, Ulrich Wiederhold wrote:
> Hallo,
> nochmal perl...ich will das jetzt ausbauen und komme beim Speichern der
> Datei nicht weiter.
> Bisher: 1. Zeile soll entfern werden:
> ...
$string =~ s/_/ /g;
> foreach $location (@locations)
> {
> open(TOGET, "<$location");
> open(DEL, ">$location.new");
> while(<TOGET>)
> {
> next unless($.-1);
ersetzen durch:
if($.==1) { s/_/ /g; next if(/\Q$string/); }
> print DEL;
> }
> close(TOGET);
> close(DEL);
> rename "$location.new", "$location";
> $i++;
> }
> ...
>
> Problem ist jetzt, daß ich nochmal überprüfen will (muß), ob die erste
> Zeile auch korrekt ist, also ob sie auch den String $string enthält.
> Außerdem kann string entweder mit " " zwischen den Wörtern oder mit "_"
> zischen den Wörtern daherkommen... (taps taps), muß also beides getestet
> werden...
>
> Also sowas in der Art
> if($zeile =~ /\Q$s t r i n g/i oder $zeile =~ /\Q$s_t_r_i_n_g/i){ do
> delete} else {next}
>
> bzw.
>
> next unless(!($ enthält $s t r i n g oder $s_t_r_i_n_g)
>
>
> So, nun wieder ein Beispiel (für Jens! :))) ):
>
> Angenommen...
>
> $string = "Dies ist ein String" oder $string = "Dies_ist_ein_String"
Na, die Beispiele haette ich mir auch noch zusammenreimen
koennen. Interessanter ist doch die Frage, was passiert, wenn Du auf
sowas triffst:
'Dies_ist ein_String_und der enthaelt auch_noch_sowas $[blah]\[blub]'
Obige Loesung behandelt einfach '_' und ' ' identisch, kommt also
klar, wenn sowohl '_' als auch ' ' im Pattern und im durchsuchten
String vorkommen.
> P.S.: Ach ja, Jens... schaffst Du das in einer Zeile!?
Du hast ja nicht gesagt, woher der $string kommen soll. Aber wenn der
schon in $s gespeichert waere, ginge wohl sowas hier:
perl -pe 'BEGIN{$_=<>;$s=~s/ /_/g;s/ /_/g;/\Q$s/||print;}'
----8<---abcd.txt--
a b_c
a
b
c
d
-----------------
~> perl -pe 'BEGIN{$s="a b c";$_=<>;$s=~s/ /_/g;s/ /_/g;/\Q$s/||print;}' abcd.txt
a
b
c
d
Gruss,
Jens.
Mehr Informationen über die Mailingliste linux-l