我正在尝试使用 执行数学运算sed,但它继续将我的变量视为字符串。输入是这样的:
$ echo 12 | sed 's/[0-9]*/&+3/'
$ 12+3
Run Code Online (Sandbox Code Playgroud)
我想要 15 作为输出。我只需要在一个段落中执行操作并替换其数学结果,因为我将程序作为 Python 守护程序运行,并且我想避免像重定向stdout文件、打开这些文件、执行操作、提取结果、执行这样的段落更换。对我来说,sed似乎最好在一行中执行所有操作。
我尝试以各种方式同时投射输入和输出,例如
$ echo 12 | sed 's/[0-9]*/int(&+3)/'
$ echo 12 | sed 's/[0-9]*/\int(&+3)/'
$ echo 12 | sed 's/[0-9]*/\int(&+3)/'
Run Code Online (Sandbox Code Playgroud)
但结果总是打印第二个字段。
我想在文本文件中搜索这样的字符串。
[task0]
[task1]
...
[task1613]
Run Code Online (Sandbox Code Playgroud)
并将每个增量增加给定的偏移量,在本例中为 3640。因此,使用我上面给出的示例,我将得到以下结果。
[task3640]
[task3641]
...
[task5253]
Run Code Online (Sandbox Code Playgroud)
我希望每个递增的数字都在目标文件中的原始位置,并[task#]环绕数字。使用sed:
sed "/^\[task/s/[0-9]*\]/3640+&/" ./test.file2
Run Code Online (Sandbox Code Playgroud)
我可以得到类似的东西:
[task3640+0]
[task3640+1]
...
[task3640+1614]
Run Code Online (Sandbox Code Playgroud)
但这不是很有用,因为我不知道如何就地评估表达式
我很确定这sed不适合这个。我在想,awk或者perl会为此工作得更好,但我对这两个都相当无能。
有人可以至少指出我正确的方向吗?我已经花了比我想承认的更长的时间。
有关我想要做什么的更详细视图,请参阅pastebin上的此页面。