Bash脚本用另一个维护语法替换PHP代码块,并在必要时转义字符

时间:2016-10-24 12:43:15

标签: php bash replace find ubuntu-14.04

我在位置/var/www/html/siteroot/app/code/community/Company/Module/Block/Module/File.php处有一个PHP文件。

此文件包含我需要替换的以下代码:

$this->getUploader()->getConfig()
    ->setUrl(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/image'))
            ->setFileField('image')
            ->setFilters(array(
            'images' => array(
                'label' => Mage::helper('adminhtml')->__('Images (.gif, .jpg, .png)'),
                'files' => array('*.gif', '*.jpg','*.jpeg', '*.png')
    )
));

使用以下代码:

$url = Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/image');
        if (class_exists("Mage_Uploader_Block_Abstract")) {
            // PATCH SUPEE-8788 or Magento 1.9.3
            $this->getUploader()->getUploaderConfig()
                ->setFileParameterName('image')
                ->setTarget($url);
            $browseConfig = $this->getUploader()->getButtonConfig();
            $browseConfig->setAttributes(
                array("accept" => $browseConfig->getMimeTypesByExtensions('gif, png, jpeg, jpg'))
            );
        } else {
            $this->getUploader()->getConfig()
            ->setUrl($url)
            ->setFileField('image')
            ->setFilters(array(
                'images' => array(
                    'label' => Mage::helper('adminhtml')->__('Images (.gif, .jpg, .png)'),
                    'files' => array('*.gif', '*.jpg','*.jpeg', '*.png')
                )
            ));
        }

如何通过bash脚本维护和转义字符来实现这一点,以便PHP语法不会中断?

1 个答案:

答案 0 :(得分:0)

Bash没有可靠的多线匹配工具。你可以使用perl。

#!/usr/bin/perl

$OLD= <<'EOF';
$this->getUploader()->getConfig()
    ->setUrl(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/image'))
            ->setFileField('image')
            ->setFilters(array(
            'images' => array(
                'label' => Mage::helper('adminhtml')->__('Images (.gif, .jpg, .png)'),
                'files' => array('*.gif', '*.jpg','*.jpeg', '*.png')
    )
));
EOF


$NEW= <<'EOF';
$url = Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/image');
        if (class_exists("Mage_Uploader_Block_Abstract")) {
            // PATCH SUPEE-8788 or Magento 1.9.3
            $this->getUploader()->getUploaderConfig()
                ->setFileParameterName('image')
                ->setTarget($url);
            $browseConfig = $this->getUploader()->getButtonConfig();
            $browseConfig->setAttributes(
                array("accept" => $browseConfig->getMimeTypesByExtensions('gif, png, jpeg, jpg'))
            );
        } else {
            $this->getUploader()->getConfig()
            ->setUrl($url)
            ->setFileField('image')
            ->setFilters(array(
                'images' => array(
                    'label' => Mage::helper('adminhtml')->__('Images (.gif, .jpg, .png)'),
                    'files' => array('*.gif', '*.jpg','*.jpeg', '*.png')
                )
            ));
        }
EOF



undef $/;
while (<>) {
s%\Q$OLD%$NEW%m;
print;
}

该脚本不是太干净或安全,但它可以满足您的需求。像perl script.pl file.php > newfile.php

一样使用