Portál AbcLinuxu, 18. listopadu 2025 09:19
Řešení dotazu:
$file = "stat1.txt";
$nick = "nick xx";
open (FILE, "<$file") or die "Can't open $file: $!\n";
@lines = <FILE>;
close FILE;
open (STDOUT, ">$file") or die "Can't open $file: $!\n";
foreach $line ( @lines ) {
print $line unless /$nick/;
}
close STDOUT;
Tu to maaas:
use strict;
my $file = "aaa"; # zazov suboru
my $nick = "nick xx"; # nick na vymazanie
my @lines;
open (FILE, "<$file") or die "Can't open $file: $!\n";
while(<FILE>) { push @lines,$_; }
close FILE;
open (STDOUT, ">$file") or die "Can't open $file: $!\n";
for my $line ( @lines ) {
print STDOUT $line unless($line =~ /$nick/);
}
close STDOUT;
btw. tvoj kod je v podstate cely spravne
Su tam 'len' 2 chyby na jednom riadku:
print $line unless /$nick/;spravne to mas mat:
print STDOUT $line unless($line =~ /$nick/);
btw. Ten kod je v podstate správně až na tu podmínku - někde mi to uteklo při editaci a zbyl mi tam jen "pahýl" ... nicméně ještě tam musí být (alespoň podle té struktury stat1.txt dle tazatele) ten $nick "orámovaný", aby to nebralo násobné výskyty řetězce nebo části jiných (nick 1 vs. nick 10, nick 11 atd.)
PS: Nehledě na to, že to celé jde napsat ještě PERLověji
unless ($line =~ /^$nick$/) jinak by to bralo pro nick1 i řádky nick10, nick11 atd. Takže správně takto:
#!/usr/bin/perl
$file = "stat1.txt";
$nick = "nick 1";
open (FILE, "<$file") or die "Can't open $file: $!\n";
@lines = <FILE>;
close FILE;
open (STDOUT, ">$file") or die "Can't open $file: $!\n";
foreach $line ( @lines ) {
print $line unless ($line =~ /^$nick$/);
}
close STDOUT;
$file = "stat1.txt"; $nick = "nick 1"; open (INFILE, "<$file") or die "Can't open $file: $!\n"; open (OUTFILE, ">$file.new") or die "Can't open $file.new: $!\n"; print OUTFILE grep $line !~ /^$nick$/, <INFILE>; close INFILE; close OUTFILE; unlink "$file"; rename "$file.new", "$file";
:
$file = "stat1.txt";
$nick = "nick 1";
open(STDOUT, ">${file}.part");
open(STDIN, "<$file");
print for grep !/^$nick$/, <>;
rename("${file}.part",$file);
#!/usr/bin/perl
$^I = "~";
$nick = "nick 6";
while (<>) {
print unless /^$nick$/;
}
To pak staci i
#!/usr/bin/perl
$nick = "nick 6";
print grep {!/^$nick$/} <>;
#!/usr/bin/perl -n
BEGIN { $nick = pop };
/^$nick\b/ || print;
Smekám! Miluju PERL ... akorát ho furt používám tak nePERLovsky, až se stydím
A co takhle?
perl -e '$n=pop;print grep{!/^$n\b/}<>' data.txt nick6
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.