Vimで整数のみで始まる行を削除する

Vimで整数のみで始まる行を削除する

整数 (行番号) とテキストを含むファイルがあります。PDF ファイルを抽出した結果、それらの行番号がテキストとは別の行に配置されてしまったため、それらの行番号をすべて削除したいと考えています。私は正規表現にはあまり詳しくありませんが、それほど難しいことではないと確信しています。私は vim/nvim を使用していますが、awk/sed を使用する必要がある場合でも、それは私にとってはうまくいきます。

ファイルは次のようになります:

123
124
125

Text was found in
those three lines
should stay

したがって、理想的には、正の整数 (1、2、3...123456) で始まり、その整数以外は何も含まれていないすべての行を検索します。これらは削除する必要があります。

どのような助けでも大歓迎です。

ボーナスチャレンジ: 何らかの理由で、一部の行は で始まる^L1234ため、追加の特殊文字があります。いつかこれらも削除したいと思うでしょう。ただし、別々の手順になる場合があります。

答え1

  • [0-9]は単純なコレクションほとんどどこでも機能する数字の形式です。Vim では\d(小数点) も使用できます。
  • 1 つ以上のインスタンスが必要な場合は、\+乗数を追加します。
  • 行にはこれだけしか含まれていないはずなので、正規表現は固定された先頭と末尾(それぞれ^と経由$)へ。
  • すべての行で一致を試みたい場合、Vim では でそれが行われます:global/{pattern}/
  • 一致する行は:deleted である必要があります。

まとめると:

:global/^[0-9]\+$/delete

も使用できますsed。こちらの方が高速で、非対話的に動作します。これはすべての入力行に任意のルールを自動的に適用するため、 は必要ありません。:globalはそこに:delete存在するだけですd。 を使用すると-i、置換はインプレースで実行されます (そのため、正しいことを確認し、元のファイルのバックアップ コピーを用意してください)。

sed -i -e '/^[0-9]\+$/d' file

オプションのプレフィックスの場合、その乗数は です\?。それが^L単一の文字である場合は、おそらく Vim で として入力する必要があります<C-V><C-L>

答え2

Vimで整数のみで始まる行を削除する

:%s/^[0-9]\+\n//gc

説明

  • :%s//- グローバル検索と置換
  • ^- 行の先頭から開始
  • [0-9]- 数字を一致させる
  • \+- 貪欲に1つ以上一致
  • \n改行に一致します (注: 行末を確認してください。行末はシステムによって異なり、\r\n代わりに eg になる場合があります)
  • gc- グローバルマッチ + 確認(cたくさんある場合や確信がある場合は削除)

出力

123
124
125

Text was found in
those three lines
should stay

:%s/^[0-9]*\n//g

Text was found in
those three lines
should stay

ボーナス

パーU&L に関する terdon の回答^Lは でありform feed character、 は を使用して削除できますsed

sed 's/\o14//g' file 

他の方法を知るには、その回答を読む価値があります。

関連情報