我想自动注释掉PHP文件中的代码块,如下所示:
原始块:
// Enable all errors
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(E_ALL);
带注释的新块:
/* For the production version, the following codelines are commented
out
// Enable all errors
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(E_ALL);
*/
所以我打算将这些行放在两个文件中,并使用 sed 自动执行替换。然而,在网上搜索后,我只找到Replace string with content of a file using sed和sed - Replace string with file content,这意味着要么只有源模式或目标模式在一个文件中,其余的在网上。但文件中没有两者的样本。
那么,如何进行更换呢?我应该使用 sed 还是 awk?
我建议您使用该
patch
实用程序来实现此目的。diff
1.使用命令创建补丁文件假设您有两个文件,其中一个包含要替换的块:
另一个包含您要替换的块:
您在它们之间创建上下文差异并将内容放入补丁文件中:
2. 应用补丁
现在考虑这是原始文件:
您可以使用之前创建的
patch
文件对要更改的文件运行命令。patchfile
-c
将补丁文件解释为上下文差异(指定或选项时实用程序 diff 的输出)”。-c
-C
。patch
实用程序将尝试确定差异列表的类型,除非被-c
、-e
或-n
选项否决。”-b
“在应用差异之前,将每个修改文件的原始内容的副本保存在同名的文件中并附加后缀”选项。.orig
3. 验证
现在将原始文件与修补后的文件进行比较:
不要尝试使用
sed
它,因为sed
不理解文字字符串(请参阅is-it-possible-to-escape-regex-metacharacters-reliously-with-sed),使用类似的工具awk
确实理解文字字符串。使用 GNU
awk
进行多字符RS
和ARGIND
:或使用任何
awk
:以上是使用这些输入文件运行的: