web-dev-qa-db-ja.com

vimで整数のみを含む行を検索する正規表現

整数(行番号)とテキストを含むファイルがあります。 PDFファイルを抽出することにより、それらの行番号はテキストから別の行に入れられ、それらの行番号をすべて削除したいと思います。私は正規表現にあまり熟練していませんが、それがそれほど難しくないはずだと100%確信しています。私はvim/nvimを使用していますが、awk/sedを使用する必要がある場合は、それでも機能します。

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

123
124
125

Text was found in
those three lines
should stay

したがって、理想的には、次のように検索します。正の整数(1,2,3 ... 123456)で始まり、その整数のみを含むすべての行。それらは削除する必要があります。

どんな助けでも大歓迎です。

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

1
Paul
  • [0-9]は、ほとんどどこでも機能する単純なcollectionの数字です。 Vimでは、\d(10進数)も使用できます。
  • 1つ以上のインスタンスが必要です。\+乗数を追加します。
  • それが行の唯一のものであるはずなので、正規表現は最初と最後にアンカーである必要があります(それぞれ^$を介して)。
  • すべての行で一致を試みたい。 Vimでは、それは:global/{pattern}/を介して行われます。
  • 一致する行は:deletedである必要があります。

まとめ:

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

sed;を使用することもできます。それはより速く、非対話的に動作します。これによりすべての入力行にルールが自動的に適用されるため、:globalは必要なく、:deletedにすぎません。 -iを使用すると、置換が適切に行われます(したがって、正しく保持し、元のファイルのバックアップコピーを用意してください!)

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

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

0
Ingo Karkat

Vimで整数のみを含む行を削除します

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

説明

  • :%s//-グローバル検索と置換
  • ^-行頭から開始
  • [0-9]-数字を一致させる
  • \+- 1つ以上の欲張りマッチ
  • \n match newline(注:行末を確認してください。これらはシステムによって異なり、たとえば\r\n代わりに)
  • 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

ボーナス

&Lに関するterdonの回答 ごとに、^L それは form feed character、wihはsedを使用して削除できます。

sed 's/\o14//g' file 

その答えを読んで、他の方法を確認することは価値があります。

0
bertieb