2013-03-19 37 views
9

私はほとんどすべてを試しましたが(私は推測します)、何も機能しませんでした。 (オペレーティングシステム:Ubuntuの12.04)Sedの正規表現の空白文字

式がマッチした(テキストファイルから削除)する:

a c 4 
a k 23 
o s 1 

私が試したもの:

's/[[a-z][:space:][a-z][:space:][0-9]]\{1,\}//gi' 
's/.\s.\s[0-9]+//g' 
's/[:alpha:][:space:][:alpha:][:space:][:digit:]+' 

答えて

13

これは一致している必要があります:

sed 's/[a-z][ ]*[a-z][ ]*[0-9]*//gi' 

1回目の試行で大括弧が2つ欠けていて、最も外側のoは必要ありませんNE:あなたは+をエスケープする必要があるため

sed 's/[a-z][[:space:]][a-z][[:space:]][0-9]\{1,\}//gi' input 

はあなたの第二の例は失敗し、まだそれが唯一のsed GNUに動作します:

sed 's/.\s.\s[0-9]\+//g' input 

また、最後の1といくつかの類似した問題:

sed 's/[[:alpha:]][[:space:]][[:alpha:]][[:space:]][[:digit:]]\+//' input 
1

中間のものは閉じる!あなたは私の外にある理由のためにプラス記号をエスケープする必要があります。 また、「.」のドットを「[a-z]」に変更したので、文字にのみ一致します。古いsed -versionsため

sed 's/[a-z]\s[a-z]\s[0-9]\+//g' 

ボーナスポータブル版(こんにちは、Macユーザー!)。いくつかのsedの実装は、 "+" にうるさいです:

sed 's/[a-z]\s[a-z]\s[0-9][0-9]*//g' 
1

[...]は、文字クラスを定義します。 [a-z]は、aからzまでの任意の文字と一致します。連続する文字を一致させるには、それぞれのクラスを使用する必要があります:[a-z][[:space:]][a-z]

+には特別な意味があるため、バックスラッシュ([0-9]\+)が必要です。

名前付き文字クラスは、文字クラス内でのみ動作します。つまり、[[:alpha:]][[:space:]]です。

関連する問題