Google グループは Usenet の新規の投稿と購読のサポートを終了しました。過去のコンテンツは引き続き閲覧できます。
表示しない

ワンライナーで指定行の削除

閲覧: 2 回
最初の未読メッセージにスキップ

hanajipon

未読、
2004/01/05 0:45:372004/01/05
To:
あけましておめでとうございます。

perl の1ライナーを使って「ファイルの1~3行目を削除」と「ファイルの後ろ3
行を削除」
というのをしたいのですが、これって1ライナーで可能でしょうか?
前者は
perl -i -ne 'print unless $. == 1..3'
で出来たのですが、
後者は出来るのでしょうか?

---
hanajipon @ mail.goo.ne.jp

Mizuno

未読、
2004/01/05 9:06:102004/01/05
To:
> perl の1ライナーを使って「ファイルの1~3行目を削除」と「ファイルの後ろ3
> 行を削除」
> というのをしたいのですが、これって1ライナーで可能でしょうか?
> 前者は
> perl -i -ne 'print unless $. == 1..3'
> で出来たのですが、
> 後者は出来るのでしょうか?

perl -e '@a=<> and print @a[0..@a-4]'
とか
perl -ne 'print pop @a if unshift(@a, $_)>3;'
でどうでしょうか。

前者はメモリが心配ですが。

Mito

未読、
2004/01/05 9:41:222004/01/05
To:
"hanajipon" <hana...@mail.goo.ne.jp> writes:

> 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頃
水戸

Shinji KONO

未読、
2004/01/05 21:22:422004/01/05
To:
河野真治 @ 琉球大学情報工学です。

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,
河野真治 @ 琉球大学工学部情報工学科,

TANAKA Jiro

未読、
2004/01/06 23:32:312004/01/06
To:
"hanajipon" <hana...@mail.goo.ne.jp> writes:
:perl の1ライナーを使って「ファイルの1~3行目を削除」と「ファイルの後ろ3
:行を削除」
:というのをしたいのですが、これって1ライナーで可能でしょうか?

perl -pe '$_= "" if($. <= 3);'
perl -pe '$_[3] = $_; $_ = shift(@_);'

#プロシン会場から(^^ R.田中二郎

Mito

未読、
2004/01/07 9:08:292004/01/07
To:
"hanajipon" <hana...@mail.goo.ne.jp> writes:

> 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頃
水戸

新着メール 0 件