sed 's/-\([0-9.]\+\)/(\1)/g' inputfile このコマンドはどういう意味ですか? [閉鎖]

sed 's/-\([0-9.]\+\)/(\1)/g' inputfile このコマンドはどういう意味ですか? [閉鎖]

次のコマンドの意味を見つけようとしています。

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)/' 
    

どちらも数字の前のダッシュを括弧で置き換える必要があります。

おすすめ記事