相关疑难解决方法(0)

用'sed'添加

我正在尝试使用 执行数学运算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)

但结果总是打印第二个字段。

sed math

45
推荐指数
7
解决办法
4万
查看次数

通过偏移量增加字符串内的数字

我想在文本文件中搜索这样的字符串。

[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上的此页面。

sed awk text-processing math

6
推荐指数
1
解决办法
2837
查看次数

标签 统计

math ×2

sed ×2

awk ×1

text-processing ×1