2

末尾にマイナス記号が付いている値を置き換えて、先頭にマイナス記号を付けようとしています。理由はわかりませんが、SEDではうまく機能しないこの正規表現があります。

echo '8.8-' | sed 's/(\d+(?:\.\d+)?)-/-\\1/'

SEDは8.8を返します-

8.8-に一致し、サブマッチ\1を8.8として識別するNotepad++RegExHelpプラグインの式を試しました

4

3 に答える 3

4

\dPerlismです。Sedは、Perl以前の古いPOSIX標準を指します。あなたがおそらく欲しいのは

echo '8.8-' | sed -r 's/([[:digit:]]+(\.[[:digit:]]+)?)-/-\1/'

これ[[:digit:]]は、Perlを書くためのPOSIXの方法\dです。

もちろん、[0-9]他の人が指摘しているように、代わりに、と書くこともできます。

-rちなみに、かっこを好きなように機能させる必要があります。

于 2012-04-24T20:45:59.270 に答える
3

\dただし、sedの数字クラスとは一致しません[0-9]

ところで、あなたが本当にやろうとしていることを含めてください-あなたは数字を扱っていますか?整数と小数?私はあなたの正規表現からできるだけ多くを推測することができますが、質問が適切に尋ねられれば、そうする必要はありません。

編集

GNU linuxを使用している場合は、移植性が高いため、従来の範囲よりも文字クラスを使用することをお勧めします。

echo '8.8-' | sed -r 's/([[:digit:]]+(\.[[:digit:]]+)?)-/-\1/'

http://sed.sourceforge.net/sedfaq3.html

于 2012-04-24T20:31:26.767 に答える
1
echo '8- 8.1- 81.2- 8.28- 82.28-' | sed -r 's/([0-9]+(.[0-9]+)?)-/-\1/g'

結果は

-8 -8.1 -81.2 -8.28 -82.28

Sedは単に\dまたは\dを理解していません:

 echo "456" | sed -r 's/\d/+/g'
 456
于 2012-04-24T20:36:44.693 に答える