検索

ホームページ  >  に質問  >  本文

vim - vi/shell でのテキスト処理に正規表現を使用する際の問題

要件は次のとおりです:

入力ファイルinput.txt:
a1
a2
a3
a4
b1
b2
a5
b3
b4
b5

必要な出力ファイルoutput.txtは次のとおりです:
a1
a4
b1
b2
a5
b3
b5

つまり、N 番目の行を削除します。N が満たす条件は、N 番目の行と N-1 行と N+1 行の最初の文字が同じです (最初と最後の行は削除されません)。

この要件を達成するために、vi の代替コマンドまたはシェルを使用できますか? いくつかのヒントも欲しいです。ありがとうございます。 (私は C++ を使用して実装しましたが、正規表現を使用して実装できるかどうかを知りたいだけです)

黄舟黄舟2746日前837

全員に返信(1)返信します

  • 黄舟

    黄舟2017-05-16 16:44:06

    vimの正規表現

    リーリー

    3段落で説明してください

    ((.).*n)
    最初の行と一致し、外側のグループ化は置換時の後方参照に使用され、内側のグループ化はその後の判断に使用されます

    ((2.*n)+)
    前の行の最初の文字で始まる次の行と一致します (1 行以上)

    (2.*$)
    最初の行の最初の文字で始まる行と一致します

    最後の 15 行は、上で一致したすべての行を最初と最後の行に置き換えます。つまり、中央の行を削除します

    注: 最初の v は Perl の通常モードに切り替えるためのもので、括弧とプラス記号をエスケープする必要はありません

    ところで、この種のテキスト処理作業を完了するには、Perl スクリプトを使用するのが最も便利です。vi の利点は視覚的なデバッグですが、大きなファイルに遭遇した場合は GG になります。

    返事
    0
  • キャンセル返事