逃避工具为sed

时间:2013-04-02 08:49:22

标签: regex sed

我的日常生活很艰难,我必须手动修补数以万计的文件,这就像80%的时间我正在编写用于修补文件的sed regexp。

所以例如我有一行代码:

"    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 regexp。

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

例如,这样的事情会很幸福:

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

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

1 个答案:

答案 0 :(得分:2)

首先,请尝试:

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

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

这将转为

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

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

在“之前”行和“之后”行上运行此操作,将结果与s|...|...|粘贴在一起,然后您就会得到:

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

将一个变为另一个。一旦你完成这项工作(你可能需要更多特殊字符,如&$),我们可以进行改进,例如从文件中读取“之前”和“之后”行。 (我不确定为什么你想要区分两个文件并为每个差异做这个 - 为什么不用另一个文件覆盖一个文件?)