用尾数减去尾随减号

时间:2012-04-24 20:29:11

标签: sed

我正在尝试替换具有尾随减号的值,并将其替换为前导减号。我有这个正则表达式虽然我不明白为什么在SED中不起作用。

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

SED返回8.8 -

我在Notepad ++ RegEx帮助插件中尝试了与8.8-匹配的表达式,并将子匹配\ 1标识为8.8

3 个答案:

答案 0 :(得分:4)

\d是一种Perlism。 Sed指的是较旧的,Perl之前的POSIX标准。您可能想要的是

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

[[:digit:]]是编写Perl \d的POSIX方式。

当然,你可以写[0-9],而不是像其他人所说的那样。

顺便说一句,您需要-r让您的括号按照您的意愿工作。

答案 1 :(得分:3)

\d与sed中的数字字符类不匹配,但[0-9]会。

顺便说一句,请说明你真正想做的事情 - 你在使用数字吗? Ints和十进制?我可以从您的RegEx中推断出同样多的内容,但如果问题被正确询问则不需要。

修改

如果你正在使用GNU linux,那么使用字符类比传统范围更好,因为它们更便携:

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

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

答案 2 :(得分: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