1

Clojureのソースコードからタイプヒントを削除したかったので、次のことを試しました。

echo "(def ^Integer a 1)" | egrep '\^\w+ '

そして、それはタイプヒントとうまく一致します。

次に、私は試しました:

echo "(def ^Integer a 1)" | sed s/\^\w+//g

ただしsed、タイプヒントは空に置き換えられません。

正規表現の何が問題になっていますか?

4

2 に答える 2

3

ほぼすべてのバージョンで、拡張正規表現ではなく、 POSIX基本sed正規表現と呼ばれるものが実装されています。の「e」は...拡張を表します。実装する正規表現の種類を推測します。 基本正規表現と拡張正規表現の大きな違いの1つは、拡張正規表現のメタ文字のみであるということです。 基本的なREの一部の実装は同じ意味で受け入れますが、それをサポートすることに移植的に依存することはできません。egrep:)+\+sed

さらに、\wPOSIX拡張正規表現構文の一部でもありません。それはPerl-ismであり、それ以来広く採用されています(たとえば、PythonやJavascriptによって)が、AFAIKはどこでも公式に標準化されていません。

ここで必要な構成は

echo "(def ^Integer a 1)" | sed 's/\^[A-Za-z0-9][A-Za-z0-9]*//g'

いいえ、それを移植可能に書くためのより短い方法はありません。

于 2012-10-28T23:52:13.997 に答える
1

正規表現をで囲み、 :'をエスケープする必要があります。+

echo "(def ^Integer a 1)" | sed 's/\^\w\+//g'
于 2012-10-28T23:51:06.697 に答える