/ / Изтриване на последния ред на файл с помощта на perl - perl, unix

Изтрийте последния ред от файла с помощта на perl - perl, unix

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!