2017-11-10 4 views
1

間の空白を削除します。sedのは、私はこれらのような表記にはいくつかのファイルがあるディレクトリ内の単語やセミコロン

:彼らはなるよう

myKey : 
mySecondKey : 
blabla : 

を、私は、セミコロンの前に空白を削除したいです

myKey: 
mySecondKey: 
blabla: 

は、私が試した:

sed -e 's/([a-z]*) :/\1:/g' . 

しかし、私は取得しています:

": \1 not defined in the RE 

私も試してみました:

sed -e 's/([a-z]*)\ \:/\1\:/g' 

エラーがしかし、変更されません。

私が間違っていることを知っていますか?

正規表現はどのように正しくありませんか?

変数を正しく定義していませんか?

+1

グループ括弧でそれを置き換えることは、拡張正規表現のオプションを使用していない場合はエスケープする必要が '-r'、変更'さん/([AZ] *):/ \ 1 ://\ '([az] * \):/ \ 1:/ g " – etopylight

答えて

1

なぜ単に:

sed -e 's/ :/:/g' 

小文字を区別しない場合に使用:あなたは大文字と小文字の文字を持っているので、あなたのキャラクターを定義する必要が

sed -e 's/([a-z]*) :/\1:/ig' 

または

sed -e 's/([a-zA-Z]*) :/\1:/g' 
+0

これは良い点ですが、ファイルがかなり長くなり、他のコンポーネントを壊すことが恐れられます。 – octavian

1

をクラスとして:

sed -E 's/^([a-zA-Z]+)\ :/\1:/g' 
#    -^- 

さらに特定の例については、得アンカー(ここでは^)を使用します。

myKey: 
mySecondKey: 
blabla: 
1

単にあなたは、単語間のすべてのスペース(\s*)を見つけることによって空白を削除することができます(たとえば、 "MYKEY")と::

sed -i 's/\s*:/:/g' . 
関連する問題