+ 和 - 交替求和

Alternating + and - in a sum

我正在寻找一种在由加号 atm 分隔的一整串数字中交替使用 + 和 - 的方法。 我需要它是 Number1 - Number2 + Number3 - Number4 等。 它必须是一个命令行命令(希望有意义o_0)并且我需要能够将巨大的总和输入其中。所以最好的是一个 sed 命令。谢谢!

到目前为止我的命令行:

cat oneven.txt | sed 's/\(\w\)/4\//g' | bc -l | sed 's/^\(.*\)$/ +/g' |sed 's/\(\w.*\w\)+\(\w.*\w\)/-/g'| tr "\n" " " | cut -c -11998

Oneven ==> 不均匀(它包含直到 1000 的所有数字(您猜对了)不均匀。

尝试过:一个 sed 命令,它将接受一对数字并将它们之间的 + 更改为最小值。没有结果。没有添加任何缺点 示例(交替前):

4.00000000000000000000 + 1.33333333333333333333 + .80000000000000000000 + .57142857142857142857 + .44444444444444444444 + .28571428571428571428 + .09523809523809523809 + .05714285714285714285 + .04081632653061224489 + .03174603174603174603 + .16666666666666666666 + .05555555555555555555 + .03333333333333333333 + .02380952380952380952 + .01851851851851851851 + .11764705882352941176 + .03921568627450980392 + .02352941176470588235 + .01680672268907563025 + .01307189542483660130 + .09090909090909090909 + .03030303030303030303 + .01818181818181818181 + .01298701298701298701 + .01010101010101010101 + .07407407407407407407 + .02469135802469135802 + .01481481481481481481 + .01058201058201058201 + .00823045267489711934 + .06250000000000000000 + .02083333333333333333 + .01250000000000000000 + [...]

我需要它是 Number1 - Number2 + Number3 - Number4 等等。 它必须是一个命令行命令(希望有意义 o_0)并且我需要能够将巨大的总和输入其中。

如果您的输入在一行中,那么您不需要 tr 命令。如果不是,那么 tr 应该在 sed 之前,因为 sed 分别处理每一行,如果数字对在不同的行上,解决方案将不起作用。

至于解决方案本身,你的想法是在数字对之间加上一个加号是好的,但是你没有为此指定一个足够好的正则表达式,所以它没有用。这是我的:

sed -e 's/\([^-+]\+\)+\([^-+]\+\)/-/g'

这表示:

  • 既不是+也不是-
  • 的非空字符串
  • 后跟 +
  • 后跟另一个这样的字符串。

您的正则表达式 (\(\w.*\w\)+\(\w.*\w\)) 是错误的,因为它实际上意味着:

  • 一个字字符
  • 零个或多个不受约束的字符
  • 另一个词字符
  • +
  • 一个字字符
  • 零个或多个不受约束的字符
  • 另一个词字符

为什么错了?因为你的加号实际上不是被单词字符包围的,而是被空格包围的。所以这实际上与线上的任何内容都不匹配。

即使考虑到空格,这仍然与您的实际数字不匹配,因为其中一些以小数点开头,这不是单词字符。

即使你修复了它,.* 也会匹配加号,这意味着如果它贪心,它可能只会替换最后一个加号。