Pokaż wyniki 1 do 3 z 3

Temat: prośba o pomoc

  1. #1
    Zarejestrowany
    Oct 2012
    Postów
    3

    Domyślnie prośba o pomoc

    Witam wszystkich. Postanowiłem skorzystać z języka perl aby zmodyfikować sobie plik tekstowy. Przykład tego pliku poniżej

    ala ma kota, kot ma lale
    23.240.34.12
    129.12.67.100
    data 12-30-2012

    chciałbym aby program pozostawił mi tylko adresy ip zamieniając ostatnie czyfry na * czyli

    23.240.34.*
    129.12.67.*

    napisałem takie prosty program

    #!/usr/bin/perl -w
    use strict;
    my $in = $ARGV[0];
    unless (defined $in) {
    die "Sposób użycia programu: $0 nazwa pliku";
    }
    my $out = $in;
    $out =~ s/(\.\w+)?$/.out/;
    unless (open IN, "<$in") {
    die "Błąd odczytu '$in': $!";
    }
    unless (open OUT, ">logi_poprawione.txt") {
    die "Błąd zapisu '$out':$!";
    }
    while (<IN>) {
    s/[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}/./;
    print OUT $_;
    }

    ale nie działa to.
    Co mam zmienić aby było ok ? Ktoś by mi pomógł?
    Ostatnio edytowane przez rezydent : 10-26-2012 - 19:24

  2. #2
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Kod:
    #!/usr/bin/perl
    use strict;
    use warnings;
    
    if ($#ARGV<0) {
      print "Uzycie: $0 <plik wejsciowy>\n\n";
      exit 1;
    }
    
    open (IN, $ARGV[0]) || die "Blad podczas otwierania pliku $ARGV[0]: $!\n";
    while (<IN>) {
      # wywalamy znaki nowej linii
      chomp;
      # pomijamy linie ktore nie zawieraja (wylacznie) adresu IP - prosty regex
      next if !/^\d+\.\d+\.\d+\.\d+$/;
      # jesli tu dotarlismy to znaczy ze jest adres IP - zamieniamy ostatnia sekcje na *
      s/\d+$/*/;
      # wyswietlamy linie  i dodajemy znak nowej linii
      print "$_\n";
    }
    close (IN);
    Traktowales zmienna $in jako nazwe pliku niby ale nie otwierales pliku w swoi kodzie, dlatego nie dzialalo. Powyzszy kod mozna jeszcze znacznie skrocic ale bylby mniej czytelny, zwlaszcza dla poczatkujacyej osoby wiec zostawiam jak jest.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  3. #3
    Zarejestrowany
    Oct 2012
    Postów
    3

    Smile

    Bardzo dziękuje za wytłumaczenie gdzie popełniałem błąd, dzięki za poprawkę i napisanie poprawnie kodu.

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj