【发布时间】:2018-07-01 15:00:22
【问题描述】:
我正在尝试编写一个非常简单的单行来查找以下情况:
foo N
并将它们替换为
foo N-Y
例如,如果我有 3 个文件,其中包含以下行:
foo 5
foo 3
foo 9
脚本以 Y=4 运行后,行将变为:
foo 1
foo -1
foo 5
我偶然发现了一个现有线程,该线程建议使用 /e 在替换命令的替换一半中运行代码,并且能够有效地从我的所有匹配项中减去 Y,但我不知道如何最好地将“foo”打印回来到文件中,因为当我尝试将 foo 和数字分成两个捕获组并将它们打印回来时,perl 认为我正在尝试将它们相乘并想要一个运算符。
这是我所在的位置:
find . -iname "*somematch*" -exec perl -pi -e 's/(Foo *)(\d+)/$1$2-4/e' {} \;
这当然行不通,“Scalar 找到了运算符在 -e 第 1 行的预期位置,靠近”$1$2。 >
编辑:更具体地说,如果我启用了 /e 选项以便能够在替换中执行数学运算,是否有一种简单的方法可以在另一个捕获组中打印字符串没有它试图对其进行数学运算的替换?
或者,是否有一种简单的方法可以仅对部分模式进行替换?我尝试将 m// 和 s/// 结合起来以实现结果,但最终无济于事。
【问题讨论】:
标签: perl