sed "$d" $file;
Използването на тази команда изглежда не работи, както $
е запазен символ в Perl.
Отговори:
5 за отговор № 1Не знам защо използвате sed
в Perl. Самият Perl има стандартен модул за изтриване на последния ред от файл.
Използвайте стандарта (от v5.8) Tie::File
модул и изтриване на последния елемент от обвързания масив:
use Tie::File;
tie @lines, Tie::File, $file or die "can"t update $file: $!";
delete $lines[-1];
3 за отговор № 2
Само последен ред
Най-близкият синтаксис изглежда е:
perl -ne "print unless eof()"
Това ще действа така sed
, т.е.: без изискването за четене на целия файл в паметта и може да работи с него FIFO като STDIN
.
Виж:
perl -ne "print unless eof()" < <(seq 1 3)
1
2
или може би:
perl -pe "$_=undef if eof()" < <(seq 1 3)
1
2
Първи и последни редове
perl -pe "
BEGIN {
chomp(my $first= <>);
print "Something special with $firstn";
};
do {
chomp;
print "Other speciality with $_n";
undef $_;
} if eof();
" < <(seq 1 5)
ще покаже:
Something special with 1
2
3
4
Other speciality with 5
Най-кратък: първи и последен ред:
perl -pe "s/^/Something... / if$.==1||eof" < <(seq 1 5)
ще покаже:
Something... 1
2
3
4
Something... 5
Опитайте тази:
perl -pe "BEGIN{$s=join"|",qw|1 3 7 21|;};
if ($.=~/^($s)$/||eof){s/^/---/}else{s/$/.../}" < <(seq 1 22)
... нещо като sed
команда:
sed "1ba;3ba;7ba;21ba;$ba;s/$/.../;bb;:a;s/^/---/;:b" < <(seq 1 22)
В скриптов файл:
#!/usr/bin/perl -w
use strict;
sub something {
chomp;
print "Something special with $_.n";
}
$_=<>;
something;
while (<>) {
if (eof) { something; }
else { print; };
}
ще даде:
/tmp/script.pl < <(seq 1 5)
Something special with 1.
2
3
4
Something special with 5.
-1 за отговор № 3
Надявам се, че се опитвате да изпълните командата "sed"от средата на perl скрипт. Препоръчвам ви да не използвате този подход, защото той ще работи само в системи без Windows. По-долу е perl "иш подход, в който можете да обработвате само първи и последни редове, вместо да харчите усилия за изтриване на съдържанието на файловете.
Ако приемем, че "myfile.txt" е входен файл:
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
Резултат -
Processing Line: This is the beginning of comment free file.
Processing Line: Hope this is also the line to get processed!