Bash脚本将PHP代码块替换为另一个维护语法和必要的字符转义的代码块


Bash script to replace a block of PHP Code with another maintaining syntax and characters escaping where necessary

我有一个PHP文件在位置/var/www/html/siteroot/app/code/community/Company/Module/Block/Module/File.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语法不会中断?

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