sedを使用して重複文字を削除する方法は?

sedを使用して重複文字を削除する方法は?

sedを使用してテキストファイルのタイトルから重複文字を削除するにはどうすればよいですか?

NNAAMMEE
       nice - run a program with modified scheduling priority

SSYYNNOOPPSSIISS
       nice     [-n    adjustment]    [-adjustment]    [--adjustment=adjustment] [command [a$

上記は例です。解析された出力を次のようにsed作成したいと思います。

NAME
       nice - run a program with modified scheduling priority

SYNOPSIS
       nice     [-n    adjustment]    [-adjustment]    [--adjustment=adjustment] [command [a$

ベストアンサー1

方法1

次のコマンドを使用してこれを実行できますsed

$ sed 's/\([A-Za-z]\)\1\+/\1/g' file.txt

はい

上記の入力例を使用してファイルを作成しましたsample.txt

$ sed 's/\([A-Za-z]\)\1\+/\1/g' sample.txt 
NAME
       nice - run a program with modified scheduling priority

       SYNOPSIS
              nice     [-n    adjustment]    [-adjustment] [--adjustment=adjustment] [command [a$

方法#2

すべての重複文字を削除する方法もあります。

$ sed 's/\(.\)\1/\1/g' file.txt 

はい

$ sed 's/\(.\)\1/\1/g' sample.txt 
NAME
    nice - run a program with modified scheduling priority

    SYNOPSIS
       nice   [-n  adjustment]  [-adjustment] [-adjustment=adjustment] [command [a$

方法#3(大文字のみ可能)

OPは大文字だけを削除するように変更できるかどうか尋ねました。修正された方法#1を使用してこれを行う方法は次のとおりです。

はい

$ sed 's/\([A-Z]\)\1\+/\1/g' sample.txt 
NAME
       nice - run a program with modified scheduling priority

       SYNOPSIS
              nice     [-n    adjustment]    [-adjustment] [--adjustment=adjustment] [command [a$

上記の方法の詳細な説明

すべての例では、文字セットAZまたはazの文字値が最初に見つかったときに保存される手法を使用しています。文字を囲む括弧は、sed後で使用するために保存されることを意味します。その後、値は即時または後でアクセスできる一時変数に保存されます。これらの変数の名前は\ 1と\ 2です。

だから私たちが使用する秘訣は、最初の文字を一致させることです。

\([A-Za-z]\)

次に、保存した値を補助文字として使用します。この値は上記の最初の文字の直後に表示する必要があります。したがって、次のようになります。

\([A-Za-z]\)\1.

また、sed検索と置換機能を活用しています。s/../../gこれはg、私たちがこれを世界中で行っていることを意味します。

したがって、あるキャラクターに会って別のキャラクターに会ったら、それを交換して同じキャラクターに置き換えます。

おすすめ記事