-PR-
解決
済み

test.htm の133048行目だけを削除したい

  • すぐに回答を!
  • 質問No.84090
  • 閲覧数129
  • ありがとう数4
  • 気になる数0
  • 回答数8
  • コメント数0

お礼率 52% (81/153)

10MBぐらいあるファイル(test.htm) の、133048行目を、単に削除したいのですが、perl script (del.pl等のファイル)で、どのように書くのでしょうか? 

awkとかsed とかを昔使った経験がありますが、perlのことをはじめたばかりで、さっぱり解りません. またperl初心者に向く基礎的なことを記したURLがありますでしょうか?

またperl以外で、こうすれば、良い、という別手法情報も今後の参考には、ありがたいです、よろしくお願いします.
通報する
  • 回答数8
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.5
レベル14

ベストアンサー率 50% (1122/2211)

> 次に、コマンドラインで実施させる書き方を知りたくなりました

了解、Windowsなんですね。Windowsのシェルはシングルクォートを
理解してくれません。なので、

> c:\>cat test.html | gawk ' NR != 133048 { print } '

は、ダブルクォートに変えて、

c:\>cat test.html | gawk " NR != 133048 { print } "

で OK です。

私も、unix と Windows を行ったり来たりしてますので、
良く間違えます (^^;
補足コメント
finetoothcomb

お礼率 52% (81/153)

皆さんこのたびは各種の方法を教えてくださり、ありがとうございました!他にも簡単な あるいは、おもしろいやり方が、あったらご教示いただけたら幸いです.
投稿日時 - 2001-06-01 16:27:17
お礼コメント
finetoothcomb

お礼率 52% (81/153)

成功しました!ありがとうございました!!
投稿日時 - 2001-06-01 16:26:05
-PR-
-PR-

その他の回答 (全7件)

  • 回答No.2
レベル14

ベストアンサー率 36% (3818/10368)

perl は判らないので、今後の参考回答です。 UNIX (Linux含め)では、そのものずばりそういう編集に非常に便利な vi というエディタがあります。 これの Win 版があるので、試されてはいかがでしょう。 ...続きを読む
perl は判らないので、今後の参考回答です。

UNIX (Linux含め)では、そのものずばりそういう編集に非常に便利な vi というエディタがあります。

これの Win 版があるので、試されてはいかがでしょう。


  • 回答No.1
レベル10

ベストアンサー率 18% (35/185)

一旦ファイルを読んで、その行だけ飛ばして出力しかないのかなぁ・・・ とりあえずman見る限りそんな感じ・・・・(;;) 日本語のmanページへのリンクを参考までに・・・ ...続きを読む
一旦ファイルを読んで、その行だけ飛ばして出力しかないのかなぁ・・・
とりあえずman見る限りそんな感じ・・・・(;;)
日本語のmanページへのリンクを参考までに・・・
  • 回答No.3
レベル11

ベストアンサー率 29% (114/390)

ファイルを一行一要素の配列として読み出して、splice関数を使えばいいと 思います。 splice( Array , Offset , Length , List ) ; とすると、配列Arrayの第Offset要素からLength個の要素を取り除いて 配列Listと置き換えます。 ListとLengthは省略できますので、 splice( Array , Offset , 1 ) ...続きを読む
ファイルを一行一要素の配列として読み出して、splice関数を使えばいいと
思います。

splice( Array , Offset , Length , List ) ;
とすると、配列Arrayの第Offset要素からLength個の要素を取り除いて
配列Listと置き換えます。

ListとLengthは省略できますので、
splice( Array , Offset , 1 ) ;
とすれば任意の要素を1つだけ削除できるはずです。
  • 回答No.4
レベル14

ベストアンサー率 50% (1122/2211)

このカテゴリに書き込んでいるということは、その削除をする、ということを CGIでやりたい、ということですよね? であれば、無理に perl を使わずとも、sed や awk でやってしまえば 良いのではないでしょうか? 例えば、awk でやるならば、こんな感じかな? #!/usr/bin/sh cat test.htm | awk ' BEGIN { print & ...続きを読む
このカテゴリに書き込んでいるということは、その削除をする、ということを
CGIでやりたい、ということですよね?

であれば、無理に perl を使わずとも、sed や awk でやってしまえば
良いのではないでしょうか?

例えば、awk でやるならば、こんな感じかな?

#!/usr/bin/sh

cat test.htm | awk '
BEGIN { print "Content-type:text/html\n" }

NR != 133048 { print }
'
お礼コメント
finetoothcomb

お礼率 52% (81/153)

回答ありがとうございます. 質問が曖昧ですみません. windows98SEのDOS窓で、コマンドラインから実施したい、です. awkとか、sedで、dos のコマンドラインで、べたべたっと書いて実施させる書き方を教えてくださると幸いです. CGIは実は使った経験ありません.

--成功したこと--
上に教えていただいたやり方を参考に、NR != 133048 { print }だけを、delline.awkと別ファイルに作成して、c:\>cat test.html | gawk -f delline.awk としたら成功しました. 

--次にやりたくなったこと--
次に、コマンドラインで実施させる書き方を知りたくなりました. c:\>cat test.html | gawk ' NR != 133048 { print } ' とやると

C:\BIN\GAWK.EXE: cmd. line:1: ^ Invalid char ''' in expression

というエラーが出てしまいます. よろしくお願い致します.
投稿日時 - 2001-06-01 14:16:40
  • 回答No.7
レベル14

ベストアンサー率 50% (1122/2211)

> > であれば、無理に perl を使わずとも、sed や awk でやってしまえば > > まあおっしゃるとおりですが、Perlでやるのがそれほど無理、無茶なことでも…。 "perl"er にはそう思われちゃうのですが、先に sed や awk を憶えちゃうと perl に移行するのが *おっくう* なのも事実なので… # 少なくとも、私 ...続きを読む
> > であれば、無理に perl を使わずとも、sed や awk でやってしまえば
>
> まあおっしゃるとおりですが、Perlでやるのがそれほど無理、無茶なことでも…。

"perl"er にはそう思われちゃうのですが、先に sed や awk を憶えちゃうと
perl に移行するのが *おっくう* なのも事実なので…

# 少なくとも、私は (^^;

つうわけで、sed の場合も。

c:\> sed -e 133048d test.html

もう一つおまけに ruby の場合も。

c:\> ruby -pe "next if $. == 133048" test.html

ちなみに ruby だと perl とほとんど同じ書き方でもいけます。

c:\> ruby -ne "$. != 133048 and print" test.html
  • 回答No.6
レベル10

ベストアンサー率 64% (73/113)

もう答えは出ていて、勝敗は決してますが(笑)、せっかくPerlで、 という最初のお伺いなのに、awkさんでしかまともな答えが出てないのも 哀しいので。 c:\> perl -ne "$. != 133048 and {print}" test.html わざと似せて書いたりして。他にも書き方はあります。 (ただし、ファイルの中身を全部読みこんでspliceを使う ...続きを読む
もう答えは出ていて、勝敗は決してますが(笑)、せっかくPerlで、
という最初のお伺いなのに、awkさんでしかまともな答えが出てないのも
哀しいので。

c:\> perl -ne "$. != 133048 and {print}" test.html

わざと似せて書いたりして。他にも書き方はあります。
(ただし、ファイルの中身を全部読みこんでspliceを使うのは、巨大な
ファイルの場合メモリを大量に消費するので効率が悪いでしょう。お薦め
しません)

PerlはもともとAwkをもっと強力に!という意図もあったようで、
だからBEGINだのENDだの、ほとんどそっくりに書くことができます。

> であれば、無理に perl を使わずとも、sed や awk でやってしまえば

まあおっしゃるとおりですが、Perlでやるのがそれほど無理、無茶なこと
でも…。Perlくんは普段いい加減ですがほんとうはやればできるいい子なんです…。
  • 回答No.8
レベル10

ベストアンサー率 64% (73/113)

ええと、一応私もPerl以前にsed, awkの人ではあったのですが…。 gawkやnawkならともかく、pureなawkの素朴なところにはほんと、泣かされましたよ。 つうわけで、ちょっと苦しいhead + tail。 C:\> sh -c "head -133047 test.html;tail +133049 test.html" というかだいぶ苦しいです ...続きを読む
ええと、一応私もPerl以前にsed, awkの人ではあったのですが…。
gawkやnawkならともかく、pureなawkの素朴なところにはほんと、泣かされましたよ。

つうわけで、ちょっと苦しいhead + tail。

C:\> sh -c "head -133047 test.html;tail +133049 test.html"

というかだいぶ苦しいですな。sh(bash)とheadとtailがないといけない。
cygwin環境なら、という。

それから、Rubyを出されたらPythonを出さぬわけにはいきますまい。
といっても、あまり知らないのでもっと粋な書き方があるかもしれませんが。
test.pyに
#!/usr/local/bin/python
import fileinput
for line in fileinput.input():
 if fileinput.lineno() != 3:
  print line,

と書いておいて(全角スペースは半角にすること)、
C:\>python test.py test.html

うーん、分が悪いな。あとはschemeで…もうお呼びでないですか。
失礼しました。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ