• ベストアンサー

viの行削除コマンドを教えて下さい。

viコマンドでご教授いただきたい事があります 「行中に"hoge"を含む全ての行を削除する」 「行頭に"hoge"がある、全ての行を削除する」 を実現する ”: ” から始まるコマンド文はありませんでしょうか? 基本中の基本ですが、 検索して調べる力がありませんでした。 ごめんなさい。 viコマンドの良いサイトあれば併せて教えて下さい。 どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.4

英語で良ければ、 vi command summaryなどのキーワードで検索すれば出てきます。 とりあえず、gとかvについて書かれたWEBページ(viではなくvimの解説ですが) を1つ紹介しておきます。 行範囲指定 g /正規表現/ exコマンド という使い方をします。 100行目から200行目までの間で"hoge"を含む行はファイル末に移動する、というのなら :100,200g/hoge/m$

参考URL:
http://www.glasscom.com/tone/linux/Reference/Vi/ViReference3.htm
tyapio
質問者

お礼

1時間ぐらい探し続けた物がここにありました。 ありがとうございます。

その他の回答 (3)

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.3

行中に"hoge"を含む全ての行を削除する :g/hoge/d 行頭に"hoge"がある、全ての行を削除する :g/^hoge/d

tyapio
質問者

お礼

これです!!! ありがとうございました。

tyapio
質問者

補足

もう一つ質問させてください。 :g とか :v とか、 WEBで検索しても見付けられないのですが、 説明が記述されているURLご存知ないでしょうか?

回答No.2

:%s/.*hoge.*//g :%s/^hoge.*//g ではいかがでしょう? . 改行以外の文字 * 0回以上の繰り返し ^ 行頭にマッチ ただし、この方法では空行が残ってしまいます。

tyapio
質問者

お礼

ありがとうございます。 そうそう、それが言いたかったんです。 けど、空行も消したいなぁ。 :vほにゃほにゃで何とかならないでしょうか? :v/.*hoge.*/d/ で、『hogeに一致する行だけ残す』が実現できました。 もう一押し。

tyapio
質問者

補足

ありがとうございます。 そうそう、それが言いたかったんです。 けど、空行も消したいなぁ。 :vほにゃほにゃで何とかならないでしょうか?

  • Paul_xxx
  • ベストアンサー率56% (27/48)
回答No.1

viはエディタなのでそういったマクロ的な処理は シェルスクリプトなりで実現するのが良いと思います。 (viのみで一度にはできません) viの中で行う手順をしめします。 検索は、 / と入力してから検索文字を入力してEnter 繰り返し検索する場合は、n と入力します。 行の削除は、コマンドモードで、dd と入力します。 直前のコマンドを繰り返すのは . で出来ます。 上記を組み合わせると /hoge で検索 dd で削除 あとは、n . と交互にキーを押せば削除できるはずです 手元に今環境が無いので確認できませんが やってみてください。

参考URL:
http://www.glasscom.com/tone/linux/Reference/Vi/ViReference1.htm
tyapio
質問者

お礼

素早い反応ありがとうございます。 :%s/なになに//g 辺りを活用して何かできませんでしょうか? 教えて頂いた手法も大好きなのですが、 今回はファイルが大きすぎて、一発変換が求められます。 ありがとうございました。

関連するQ&A