次のコマンドの意味を見つけようとしています。
sed 's/-\([0-9.]\+\)/(\1)/g' inputfile
私はこれが数字ではなく文字に関連していることを知っています。
ベストアンサー1
GNU sedでは、ダッシュの後に数字やドットが続くことを見つけ、括弧内の同じ数字に置き換えます。つまり、に-123.45
なりました(123.45)
。
macOS の BSD ベースのシステムなどの他のsed
システムでは、ダッシュ、数字、またはドット、文字通りのプラス記号を見つけ、ダッシュを削除し、残りを括弧で囲みます。つまり、それはになるがある-1+
のは(1+)
残しておく。-123
違いは、\+
基本正規表現には標準的な意味がないためです。 GNUはそれを拡張正規表現と同じように解釈します+
(つまり、「前の1つ以上」)。一方、他の人はこれを文字通り受け入れます+
。
左側のパターンの残りの部分はダッシュ自体が一致し、[0-9.]
数字または点と一致し、\( .. \)
中間部分をキャプチャします。代わりに、括弧は文字通り使用され、\1
中の内容はすべて入れ直されます\( .. \)
。
携帯性が良いはずです。
拡張REでは
sed
これをサポートすると仮定すると、-E
多くの人が次のようにします。sed -E 's/-([0-9.]+)/(\1)/'
基本REから:
sed 's/-\([0-9.]\{1,\}\)/(\1)/'
どちらも数字の前のダッシュを括弧で置き換える必要があります。