1

我的日常生活很艰难,我必须手动修补数以万计的文件,而 80% 的时间我都在编写用于修补文件的 sed 正则表达式。

所以例如我有一行代码:

"    Limit("POST", "*", ".*", 1000, PER_MINUTE),"

我已经在某个特定的地方注入了一些文件,所以我为此使用 sed:

limits_py=/my/path/limits.py
sed -i "s/\ \ \ \ Limit(\"POST\",\ \"\*\",\ \"\.\*\",\ 10,\ PER_MINUTE),/\ \ \ \ Limit(\"POST\",\ \"\*\",\ \"\.\*\",\ 1000,\ PER_MINUTE),/" ${limits_py}

我真的厌倦了为每个代码字符串手动编写 sed 正则表达式。

所以问题:如何从字符串生成 sed?

例如,这样的事情将是一种幸福:

echo 'someclass.somemethod("some_argument") # blah blah my comment here' > sed_generator --replace

为sed“调整”每一行真的很烦人..有什么工具吗?或者甚至更好地diff生成两个文件并为每个差异生成 sed 正则表达式替换?也许没有正则表达式可以sed?

4

1 回答 1

2

首先,尝试:

s|\(["*]\)|\\\1|g

(注意括号中的特殊字符列表,目前只有"*。)

这将转

"    Limit("POST", "*", ".*", 1000, PER_MINUTE),"

进入

\"    Limit(\"POST\", \"\*\", \".\*\", 1000, PER_MINUTE),\"

在 "before" 行和 "after" 行上运行此命令,将结果与 一起粘贴s|...|...|,您将获得:

s|\"    Limit(\"POST\", \"\*\", \".\*\", 1000, PER_MINUTE),\"|\"    Limit(\"POST\", \"\*\", \".\*\", 10, PER_MINUTE),\"|

这将一个变成另一个。一旦你得到这个工作(你可能需要更多的特殊字符,比如&$),我们可以进行改进,比如从文件中读取“之前”和“之后”行。(我不确定您为什么要区分两个文件并针对每个差异执行此操作-为什么不直接用另一个文件覆盖一个文件?)

于 2013-04-03T16:04:42.577 回答