2013-05-19 58 views
7

私はUbuntu 12.04でこの置換コマンドを実行します。sedエラー "無効な範囲の終了"

$ sed -e "s/([a-zA-Z0-9.-/\\ :]+)/\1/g" 

ただし、次のエラーが発生します。

のsed:-e式#1、CHAR 27:無効な範囲の終了

私は同じ表現がMacOSXの上で動作します覚えています。
コマンドが失敗する理由を説明できますか?

答えて

9

2つの方法で解決できます。そのうちの一つは、それは次のようになり、特殊文字をエスケープ避け、最初または最後の位置までの範囲内の-を移動し、その特別な意味を避けるために-rスイッチを使用することです:

sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g" 

そうしないと、エスケープする必要があります。どちらか()および+のようなもの:

sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g" 
+0

Thx!これはコマンドラインで動作します。しかし、[ここ](http://stackoverflow.com/questions/16637799/sed-error-invalid-reference-1-on-s-commands-rhs)はフォローアップの質問です。 – JJD