Viエディター:ファイル内の複数の行を削除する最も速い方法は何ですか?


12

Viエディターを使用して、ファイル内の複数の行を削除したいと思います。アイデアや提案をお願いします。

私の目標は次のとおりです:

前:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
.
.
29
30
.
.

後;

1
10
20
30
40
.
.

3
削除する行をどのように選択しましたか?10行ごとに1行を残しますか?
matzeri

1
:[range]dたとえば、:3,5d3行目から5行目まで(包括的に)を削除して、行の範囲を削除できます。
Bratchley


@R Ketkaew-数字のリストを削除しようとしていますか、それとも行ですか?明確にするために質問を更新していただけませんか?
DarkHeart 2016

私はあなたがViにについて尋ねている知っているが、あなたはあまりにも、GNU sedので行うことができます:gsed -n '1p; 0~10p'
shadowtalker

回答:


17

10行ごとに残して残りを削除したい場合:

%norm 9ddj

説明:

% ファイル全体

norm 「通常モード」で以下のコマンドを実行します

9dd 9行を削除

j 1行下に移動する(つまり、そのままにする)

注:これにより、最初の行が削除されます。

http://www.rayninfo.co.uk/vimtips.htmlから転載


または、グローバルコマンドを使用します。

  • 最初の行を複製する ggYP
  • :g/^/+ d9

/programming/1946738/vim-how-to-delete-every-second-rowから改作


またはあなたが使うことができますawk

%!awk 'NR \% 10 == 0 || NR == 1'

awkコマンドは私にとってはうまくいきます。awkには最低1ブロックが必要だといつも思っていました{...}。あなたが知らないのは良いことです。これは、私が機能させた最初の重要なawkコマンドです。
the_velour_fog

1
@the_velour_fogブロック必要です。記述しない場合、AWKは記述したかのように動作します{ print $0 }
shadowtalker

@RKetkaewどのオプションを使用しましたか?回答が質問を解決する場合は、チェックマークをクリックして回答としてマークしてください。
underscore_d

@underscore_dこんにちは、DarkHeartから提案されたコマンドを使用しました。コメントしてくださってありがとうございます。
rangsiman

12
:2,$v/0$/d

02行目から始まっていない行を削除します。


2
これ、これは賢い解決策です。私は説明を追加したい2,$範囲で、コマンドを。一致しないすべての行で実行される正規表現とexコマンドはどこにありますか。v/0$/dg!0$d
2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.