perl の1ライナーを使って「ファイルの1~3行目を削除」と「ファイルの後ろ3
行を削除」
というのをしたいのですが、これって1ライナーで可能でしょうか?
前者は
perl -i -ne 'print unless $. == 1..3'
で出来たのですが、
後者は出来るのでしょうか?
---
hanajipon @ mail.goo.ne.jp
perl -e '@a=<> and print @a[0..@a-4]'
とか
perl -ne 'print pop @a if unshift(@a, $_)>3;'
でどうでしょうか。
前者はメモリが心配ですが。
> perl の1ライナーを使って「ファイルの1~3行目を削除」と「ファイルの後ろ3
> 行を削除」
> というのをしたいのですが、これって1ライナーで可能でしょうか?
> 前者は
> perl -i -ne 'print unless $. == 1..3'
> で出来たのですが、
> 後者は出来るのでしょうか?
printf "1,3d\nwq\n"|ed file
# え”っ、笑えない? > one-liner
perl -pe '$_ = "" if $. <= 3'
perl -ne 'BEGIN{$i = 0} print if ++$i > 3'
perl -ne 'push(@l, $_); print shift(@l) if $. > 3'
perl -ne 'push(@b, $_); END{for ($i = 3; $i < $#b; $i ++) {print $b[$i];}}'
最後のは論外としても、他にもいろいろありそうですね。
--
01/05 23:38頃
水戸
In article <btatm4$q5r$1...@nn-os105.ocn.ad.jp>, "hanajipon" <hana...@mail.goo.ne.jp> writes
> perl の1ライナーを使って「ファイルの1~3行目を削除」
> perl -i -ne 'print unless $. == 1..3'
print if (1..3)
でいいんじゃないかな。
>と「ファイルの後ろ3行を削除」
> 後者は出来るのでしょうか?
ふむ。
In article <200401052306...@sox.m-jy.net>,Mizuno <miz...@m-jy.net> writes
> perl -ne 'print pop @a if unshift(@a, $_)>3;'
なるほど。
$a[0] = <>; $a[1] = <>; $a[2] = <>;
while(<>) { push(@a,$_); print shift(@a); }
なんてのを思い付きますが... one liner じゃないじゃん。あはは。
---
Shinji KONO @ Information Engineering, University of the Ryukyus,
河野真治 @ 琉球大学工学部情報工学科,
perl -pe '$_= "" if($. <= 3);'
perl -pe '$_[3] = $_; $_ = shift(@_);'
#プロシン会場から(^^ R.田中二郎
> perl の1ライナーを使って「ファイルの1~3行目を削除」と「ファイルの後ろ3
> 行を削除」
> というのをしたいのですが、これって1ライナーで可能でしょうか?
> 前者は
> perl -i -ne 'print unless $. == 1..3'
> で出来たのですが、
> 後者は出来るのでしょうか?
perl -e 'open F, "|-", "ed $ARGV[0]"; print F "-3,.d\nwq\n"' edit_file
# one-liner ;-P
--
01/07 23:07頃
水戸