-2

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

到目前为止,我的命令行:

cat oneven.txt | sed 's/\(\w\)/4\/\1/g' | bc -l | sed 's/^\(.*\)$/\1 +/g' |sed 's/\(\w.*\w\)+\(\w.*\w\)/\1-\2/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),并且我需要能够将巨大的总和通过管道传输到其中。

4

1 回答 1

1

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

至于解决方案本身,您的想法是采用一对带有加号的数字,但是您没有为此指定足够好的正则表达式,所以它不起作用。这是我的:

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

这说:

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

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

  • 一个字字符
  • 零个或多个无约束字符
  • 另一个单词字符
  • +
  • 一个字字符
  • 零个或多个无约束字符
  • 另一个单词字符

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

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

即使你解决了这个问题,.*也会匹配加号,这意味着如果它是贪婪的,它可能只会替换最后一个加号。

于 2015-01-05T15:59:22.143 回答