我的日常生活很艰难,我必须手动修补数以万计的文件,这就像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?
答案 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),\"|
将一个变为另一个。一旦你完成这项工作(你可能需要更多特殊字符,如&
和$
),我们可以进行改进,例如从文件中读取“之前”和“之后”行。 (我不确定为什么你想要区分两个文件并为每个差异做这个 - 为什么不用另一个文件覆盖一个文件?)