背景:我正在使用 ZenCart php 软件,我想用 sed 编辑不同的主题,但使用相同的 php 文件。因此,通过 sed 对主题进行了一些自动更改。
s1=$'<img itemprop="image" src="'\'' . zen_output_string($src) . '\''"'
sed -i.bak -r 's/$image = '\''<img src="'\'' \. zen_output_string\($src\) \. '\''" alt="'\'' \. zen_output_string\($alt\) \. '\''"'\'';/'"$s1"/ html_output.php
这运行正常,但文件中没有任何更改,为什么,有什么问题?
编辑我设法解决了这个问题,产生了以下脚本:
echo "Updating your Zencart theme's files..."
echo "Creating backups of important files."
mkdir -p ./zentmp/includes/functions && cp ./includes/functions/html_output.php ./zentmp/includes/functions/ && mkdir -p ./zentmp/includes/templates && cp -Rf ./includes/templates/ ./zentmp/includes/templates && mkdir -p ./zentmp/includes/classes && cp ./includes/classes/breadcrumb.php /zentmp/includes/classes/
echo "Updating theme file /includes/functions/html_output.php"
s1=$'itemprop="image" src="'\'' . zen_output_string($src) . '\''"'
sed -i -r 's/src="'\'' \. zen_output_string\(\$src\) \. '\''"/'"${s1}"/ html_output.php
echo "File updated..."
s2=$'itemprop="image" class="imgLink"'
for dir in ./zentmp/includes/templates/*/
do
dir=${dir%*/}
echo "Updating theme file /$dir/tpl_modules_main_product_image.php" (1/2)
sed -i -r 's/class="imgLink"/'"${s2}"/ ./$dir/tpl_modules_main_product_image.php
echo "Updating theme file /$dir/tpl_modules_main_product_image.php" (2/2)
s3=$'title="'\'' . addslashes($products_name) . '\'' itemprop="image"'
sed -i -r 's/title="'\'' \. addslashes\(\$products\_name\) \. '\''"/'"${s3}"/ ./$dir/tpl_modules_main_product_image.php
done
上面的工作很好,直到下面的代码:
for dir2 in ./zentmp/includes/templates/*/
do
dir2=${dir2%*/}
s4=$"<span itemprop="name"><?php echo \$products_name; ?>"
sed -i -r 's/<?php echo \$products_name; ?>'/'"${s4}"/ ./$dir2/tpl_product_info_display.php
done
根据要求,我将按使用顺序发布我要替换的片段:
$image = '<img src="' . zen_output_string($src) . '" alt="' . zen_output_string($alt) . '"';
到
$image = '<img itemprop="image" src="' . zen_output_string($src) . '" alt="' . zen_output_string($alt) . '"';
第二:
<span class="imgLink">
到
<span itemprop="image" class="imgLink">
第三:
$rel . '" title="' . addslashes($products_name) . '">
到
$rel . '" title="' . addslashes($products_name) . '" itemprop="image">
请注意,第二个 sed 使用了两次。