はSED

2017-01-28 13 views
1
で逆参照せずに繰り返し文字を削除

は、我々ははSED

HHEELLOO 
HHYYPPOOTTHHEESSIISS 

が含まれており、私たちは繰り返し文字を削除したいファイルがあるとしましょう。私の知る限りでは、私たちは

s/\([A-Z]\)\1/\1/g 

これは宿題の問題であり、教授は彼が戻って、参照または拡張正規表現せずに練習をしようとする私たちを望んでいると述べてこれを行うことができます。これはこれで可能ですか?誰かが正しい方向に私を指すことができれば感謝します!ありがとう!ワンライナーとして

s/AA/A/g 
s/BB/B/g 
... 
s/ZZ/Z/g 

+0

@Lucero拡張正規表現が有効になっていない場合は、括弧をエスケープする必要があります。 –

答えて

1

ここに1つの方法だ

sed 's/AA/A/g; s/BB/B/g; ...' 
+0

これは大文字と小文字のアルファベットの両方を処理するための長い表現ですが、私は宿題をする代わりに思考を刺激する指導が好きです。 –

+0

ありがとうございました!私はそのようにすることを恐れていました。なぜなら、それは非常にシンプルな何かをする長い道のりのように思えるからです。しかし、それが唯一の方法だと私は考えています。 制限があります。 –

2

はこれを行うための唯一の合理的な方法は、この場合trには、仕事のための適切なツールを使用することです:

$ tr -s 'A-Z' < file 
HELO 
HYPOTHESIS 

しかし、特定の問題でsedを使用する場合は、それはちょうど:

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

それがあなたが探しているものでない場合は、より正確に代表的なサンプル入力と予想される出力を表示するために質問を編集してください。