整数 (行番号) とテキストを含むファイルがあります。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}/
。 - 一致する行は
:delete
d である必要があります。
まとめると:
: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
他の方法を知るには、その回答を読む価値があります。