• ベストアンサー

最終行をファイルを開かずにカットする方法はありますか?

UNIXのviでファイルを開くと最終行が不完全といわれてしまいます。最後に半角スペースと変な文字が入っているようです。 viエディタのコマンドで、DDを押し最終行を手動でカットすると直るのですが、 Cやシェルなどで最終行をカットする方法はありますでしょうか?

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

  • ベストアンサー
  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.2

sed を使ってみましょうか。以下のようにすればいけたはず。 sed '$d' file > newfile 「$」は最終行を表すアドレス指定、「d」はその行を削除することを表します。 パターンスペースやホールドスペースなどと言い出すと一気に話が複雑になりますが、 単純な置換なら sed におまかせ!です。

参考URL:
http://www.chimimo.com/sed/
matchori
質問者

お礼

sedすごいんですね。完璧でした。 ありがとうございました(^^)

その他の回答 (1)

回答No.1

wcで行数を数えて、その行数だけheadで取り出せばいいと思います。 最終行が不完全とは、最終行に改行がないという意味だと思います。wc -lの結果は手元のマシンでは改行のない最終行はカウントしませんでしたので、 head -`wc -l <originalfile` originalfile >newfile とすればいいでしょう。wcの仕様が違って、改行のない最終行も1行と数える場合は、shなら head -`expr \`wc -l <originalfile\` - 1` originalfile > newfile となります。cshは文法が違うので注意してください。 ` はシングルクォートではなく、バッククォートです。

関連するQ&A

  • viで一括で行をつなげたい

    viエディタで、 :%s/???/???/g とかで、行を繋げることはできないでしょうか。 行の最後がある特定の文字列がきた場合には、 (もしくは全ての行の) 行と行をつなげる(改行をなくす)という意味です。 viで「Shift+J」で1行単位でできるのは知ってるのですが 一括置換したいです。 もし、viでなくても他のテキストエディタ等で方法があれば 教えてください。

  • word2010でページの最終行が空行に

    word2010を使っています。日本語で文書を作成しているのですが、 ページの最終行の先頭にカーソルがある状態で全角文字を入力すると 次ページの1行目に書き込まれてしまいます。 半角文字を入力してみると、そのままそのページの最終行に入力され改ページはしません。 また、ページの途中の行を改行してみると、やはり改ページしてしまいます。 最終行までびっちり埋めて1ページにおさめたいのに、 見た目最終行にもう一行書けそうなスペースが残ったまま、 実際には全角文字が書き込めず、困っています。 文書の途中には表を挿入しています。 原因がわからず困っています。 解決策ではなくても、原因の可能性として考えられることを 教えていただきたいです。 よろしくお願いします。

  • viエディタのコマンド

     FreeBSDでapacheのhttpd.confを編集するのにviエディタをつかっているのですがhttpd.confがとても長く編集しずらく感じます。ときどき350行目のここがおかしいと教えていただくのですがviエディタでここが何行目かわかるコマンドがあるのでしょうか?また何行目に飛ぶためのコマンドはあるのでしょうか?今は文字列の検索/でその行までとんでいます。  よろしくおねがいします。

  • *.txtファイルの最終行だけ参照して、バッチファイルを作りたい

    *.txtファイルのなかに"test"という文字をfindstrコマンド又はfindコマンドで探して、出力したいのですが、全ての行を参照して出力するのではなくて、最終行だけを参照して出力するといったバッチファイルを作成したいのですが、どうやればいいのでしょうか? どうぞよろしくお願いいたします。

  • シェルスクリプト(bash)によるファイルの編集

    シェルスクリプト(bash)によるファイルの編集についてのご相談です。 私にあまりスクリプトの知識がないので申し訳ございませんが、 どなたかお知恵を拝借させてください。 よろしくお願いします。 【条件】 ・以下のような文字列を含むファイルが複数あるとします。 ・そして、その文字列は、ファイル内の不特定の行に存在します。 ※[半角スペース]、[タブ]は実際には便宜上記載していますが、実際は 本当の半角スペース、タブが入ります。 AAA[半角スペース]BBB AAA[半角スペース]CCC AAA[タブ]BBB AAA[タブ]CCC 【やりたいこと】 このとき、 AAA[半角スペース]BBB および AAA[タブ]BBB の行の下に、それぞれ、 AAA[半角スペース]DDD  と   AAA[タブ]DDD を挿入したいのですが、これをスクリプト(コマンド)でどのように行えば よいのかわからずに困っています。

  • テキストファイルの最終行の改行コード削除

    お世話になります。 SQLコマンドを発行し、csvファイルを自動生成させるシェルスクリプトを作ったのですが、最終行にある改行コードを削除して欲しいとの指示を受けて、その方法を調査。試行錯誤しているのですがよい方法が見つかりません。 最終行にある改行コードのみを削除するにはどうしたら宜しいでしょうか。 ご教示頂ければ幸いです。 宜しくお願い致します。                                以上

  • ファイルからの全文読み込み

    ファイルから全文読み込むにはどのようにしたらよいのでしょう? ・1行あたり最大100文字まで ・何行あるか不明 ・すべて半角英数字 ・途中に半角スペースあり 全文読み出し、配列に取っておきたいと思いますが、 具体的にどうしたらよいのかわかりません。 fgetsですと最後の1行しか取れませんし・・

  • viで行の検索をしたいのですが?

    http://itpro.nikkeibp.co.jp/members/LIN/LIN_CONTENTS/20020531/1/vi.shtmlから vi [-Rbnr] [+[line]] file という構文が示されていますが、いまいちうまく出来ません。(指定の仕方がまちがっているかもしれませんが) sshでPuttyを使って、RedHat9(Publisher's Edition) を操作しています。 cのプログラミングをはじめたばかりですが、( gccのコマンドも使い切ってないのですが、) エラーの場合に出てくる行番号が エディタ上にはでてこないので、これを検索する方法を探していました。man でも探しましたが、分かりませんでした。cのプログラミングのエディタのもっと良い方法があれば更に知りたいのですが。(cpuが遅いので、sshで操作しています。)基本的にはviでの行の検索方法です。よろしく、お願いします。

  • メールでの1行の文字数

    いつもお世話になります。 メールを送る際、1行あたりの文字数はどれくらいがいいのでしょうか? 私はいつも1行あたり半角72文字にしていました。メールソフトでそういう設定にしてるものを使うか、自分で手動で半角72文字で改行していました。 しかし相手からの返信メールで、引用されている私の元メールが行の最後の2,3文字だけ残して折り返されていて見た目が良くないときがあります。 これは1行あたりの文字数はもっと少ない方がいいという事でしょうか? そこで 1. メールの1行あたりの文字数は何文字がいいのですか? 2. メールを作成する際、改行に関してはどういうふうにしていますか?手動で改行しているか、自分で改行は全くしないでメーラーの設定にまかせているかなど。手動で改行を入れているという人はどういうふうにして文字数を数えているのですか? 宜しくお願い致します。

  • windowsでの改行削除(一万行単位)

    windowsでの改行削除(一万行単位) 5万行近くあるテキストの改行を全てなくし、END(半角大文字)文字の部分だけ改行を残したいです。 サクラエディタの置換機能で¥nをNULL(何もなし)に置換するとものすごく処理が遅く、低スペックのためPCがフリーズしてしまいます。 エクセルでの処理も考えましたが同様にフリーズ。 unixでtrコマンドでの置換を試しましたが、文字化けしてしまいました。 dosかvbaなどでできないかと思いましたが、知識不足の為考えあぐねております。 pcはネットに繋がっていない為、フリーソフトの類は使用できないです。 どなたかいい方法をご存知の方教えてください。 宜しくお願いします。

専門家に質問してみよう