sed "$d" $file;
Używanie tego polecenia nie działa, jak $
jest zarezerwowanym symbolem w Perlu.
Odpowiedzi:
5 dla odpowiedzi № 1Nie wiem, dlaczego używasz sed
w Perl. Sam Perl ma standardowy moduł do usunięcia ostatniej linii z pliku.
Użyj standardu (od wersji 5.8) Tie::File
moduł i usuń ostatni element z powiązanej tablicy:
use Tie::File;
tie @lines, Tie::File, $file or die "can"t update $file: $!";
delete $lines[-1];
3 dla odpowiedzi № 2
Tylko ostatnia linia
Najbliższa składnia wydaje się być:
perl -ne "print unless eof()"
To zadziała jak sed
, tzn .: bez wymogu odczytu całego pliku do pamięci i może z nim pracować FIFO lubić STDIN
.
Widzieć:
perl -ne "print unless eof()" < <(seq 1 3)
1
2
albo może:
perl -pe "$_=undef if eof()" < <(seq 1 3)
1
2
Pierwsza i ostatnia linia
perl -pe "
BEGIN {
chomp(my $first= <>);
print "Something special with $firstn";
};
do {
chomp;
print "Other speciality with $_n";
undef $_;
} if eof();
" < <(seq 1 5)
wyrenderuje:
Something special with 1
2
3
4
Other speciality with 5
Najkrótsza: pierwsza i ostatnia linia:
perl -pe "s/^/Something... / if$.==1||eof" < <(seq 1 5)
wyrenderuje:
Something... 1
2
3
4
Something... 5
Spróbuj tego:
perl -pe "BEGIN{$s=join"|",qw|1 3 7 21|;};
if ($.=~/^($s)$/||eof){s/^/---/}else{s/$/.../}" < <(seq 1 22)
... coś jak sed
dowództwo:
sed "1ba;3ba;7ba;21ba;$ba;s/$/.../;bb;:a;s/^/---/;:b" < <(seq 1 22)
W pliku skryptu:
#!/usr/bin/perl -w
use strict;
sub something {
chomp;
print "Something special with $_.n";
}
$_=<>;
something;
while (<>) {
if (eof) { something; }
else { print; };
}
da:
/tmp/script.pl < <(seq 1 5)
Something special with 1.
2
3
4
Something special with 5.
-1 dla odpowiedzi nr 3
Mam nadzieję, że próbujesz wykonać polecenie "sed"od środka skryptu perla. Polecam nie używać tego podejścia, ponieważ będzie działać tylko w systemach bez systemu Windows. Poniżej znajduje się perl "metoda, w której można przetwarzać tylko pierwszą i ostatnią linię, a nie wysiłek, aby usunąć zawartość pliku.
Zakładając "myfile.txt" jako plik wejściowy:
open (FH, "<", "myfile.txt") or die "Unable to open "myfile.txt": $! n";
$i = 1;
while(<FH>){
next if ($i++ == 1 or eof);
# Process other lines
print "nProcessing Line: $_";
}
close (FH);
print "n";
1;
myfile.txt -
# First line
This is the beginning of comment free file.
Hope this is also the line to get processed!
# last line
Wynik -
Processing Line: This is the beginning of comment free file.
Processing Line: Hope this is also the line to get processed!