我有一个来自插件的2个WordPress文件(php
),无论何时更新,我都希望自动修复一些最适合我的行。
我在CentOS中运行我的网站,并且我可以完全控制机器,因此我可以通过Cron运行shell脚本进行自动化任务。
我如何搜索和替换(不是通过行号,因为它是第三方插件,所有者可能会改变位置,因为它只是为我的网站定制我不能请求"错误修复",因为它不是错误,而是我网站的改进)。我将缩短mod,因为它将是大量的mods来申请这两个文件,我只需要知道如何做到这一点。
类recovery.php
搜索:function dump_files( $warning = false ) {
并替换为:function dump_files( $warning = false ) { $cancel_order;
类prompt.php
搜索:private $replace_only;
并替换为:private $replace_only = true;
我怎样才能完成这项工作?我正在浏览StackOverFlow,有些用户建议使用sed
进行搜索和替换,但由于这不是纯文本而是php
个文件,这个sed
会适用吗?或者有更好的解决方案吗?
- 编辑 如何使用SED进行多行搜索和替换?我使用的是传统方式,但当它的2行(及以上)缩进时它不会被替换。例如:
if ( empty( $donot_dump ) ) {
return false;
类似于:
if ( empty( $donot_dump ) ) {
return true;
答案 0 :(得分:1)
是的,当然sed
可以应用于任何文本文件格式。您需要做的就是使用语法s/orignial/replace
语法进行搜索和替换。如果使用-i
语法,它将直接替换文件的内容。所以你需要的只是
sed -i.bak "s/function dump_files( \$warning = false ) {/function dump_files( \$warning = false ) { \$cancel_order;/g" class-recovery.php
和第二个文件
sed -i.bak "s/private \$replace_only;/private \$replace_only = true;/g" class-prompt.php
通常我们在'
的参数周围使用sed
(单引号),但由于源字符串周围有空格我们需要保留它,所以双引号字符串会这样做。另外,在$
之前的双引号变量具有特殊含义,即shell将它们视为变量并尝试扩展它。我们需要使用\
来逃避它,以便知道它不是变量而是文字。
-i.bak
是为了能够在扩展名.bak
下存储该文件的副本并替换原始文件,以便如果sed
未按预期替换您的文件内容,则可以总是用这个文件恢复它。
如果您不想存储备份文件,请删除.bak
并保持为-i
。
如果您的替换字符串需要换行符,请使用\\n
和常用空格来根据需要设置格式。例如,
sed "s/function dump_files( \$warning = false ) {/function dump_files( \$warning = false )\\n { \$cancel_order;/g" file
产生如下输出
function dump_files( $warning = false )
{ $cancel_order;