我试图替换具有尾部减号的值并将其替换为前导减号。我有这个正则表达式在SED中不起作用,尽管我不明白为什么。替换尾部减号与前导减号
echo '8.8-' | sed 's/(\d+(?:\.\d+)?)-/-\\1/'
SED返回8.8-
我试图在记事本++正则表达式帮助插件,它相匹配的8.8-并识别子匹配\ 1 8.8
我试图替换具有尾部减号的值并将其替换为前导减号。我有这个正则表达式在SED中不起作用,尽管我不明白为什么。替换尾部减号与前导减号
echo '8.8-' | sed 's/(\d+(?:\.\d+)?)-/-\\1/'
SED返回8.8-
我试图在记事本++正则表达式帮助插件,它相匹配的8.8-并识别子匹配\ 1 8.8
的\d
是Perlism。 Sed指的是较旧的,Perl之前的POSIX标准。你可能想要的是
echo '8.8-' | sed -r 's/([[:digit:]]+(\.[[:digit:]]+)?)-/-\1/'
的[[:digit:]]
是POSIX的方式来写Perl的\d
。
当然,你可以只写[0-9]
,而不像别人指出的那样。
顺便提一句,你需要-r
来使你的括号能够随你的喜好工作。
\d
不匹配一个数字字符的表达在sed,[0-9]
将尽管。
顺便说一句,请包括你真的想要做什么 - 你使用数字? Ints和小数?我可以从您的RegEx中推导出尽可能多的数据,但如果问题得到妥善解答,则不需要这么做。
编辑
如果您使用GNU Linux上,最好使用字符类比传统的范围,因为他们是更便携:
echo '8.8-' | sed -r 's/([[:digit:]]+(\.[[:digit:]]+)?)-/-\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
桑达根本不明白\ d或\ d:
echo "456" | sed -r 's/\d/+/g'
456
感谢您的详细解释。 – Todd 2012-04-25 00:57:31