vim - vi/shell でのテキスト処理に正規表現を使用する際の問題
黄舟
黄舟 2017-05-16 16:42:06
0
1
715

要件は次のとおりです:

入力ファイル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++ を使用して実装しましたが、正規表現を使用して実装できるかどうかを知りたいだけです)

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信 (1)
黄舟

vimの正規表現

リーリー

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

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

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

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

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

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

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

いいねを押す+0
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート
    私たちについて 免責事項 Sitemap
    PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!