我正在尝试替换具有尾随减号的值,并将其替换为前导减号。我有这个正则表达式虽然我不明白为什么在SED中不起作用。
echo '8.8-' | sed 's/(\d+(?:\.\d+)?)-/-\\1/'
SED返回8.8 -
我在Notepad ++ RegEx帮助插件中尝试了与8.8-匹配的表达式,并将子匹配\ 1标识为8.8
答案 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]
会。
修改强> 的
如果你正在使用GNU linux,那么使用字符类比传统范围更好,因为它们更便携:
echo '8.8-' | sed -r 's/([[:digit:]]+(\.[[:digit:]]+)?)-/-\1/'
答案 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