【发布时间】:2019-11-21 08:05:26
【问题描述】:
我正在尝试创建一个 bash 脚本来替换所有出现的
<?= /* @noEscape */ __('any random string, of any length') ?>
与
<?= $block->escapeHtml(__('any random string, of any length')) ?>
在特定的文件或目录中。
问题是内部字符串可以是任何东西。
到目前为止,我已经尝试过使用sed。也许这不是最好的方法。
有什么想法吗?
#!/bin/bash
sed 's/\/\* @noEscape \*\/ __\('.*'\)/$block->escapeHtml\('.*'\)\)/g' $1 > $1.test
mv $1.test $1
【问题讨论】:
-
“随机字符串”是否包含单引号 (
') 或右括号 ()) 或结束标记 (?>)?结束标签 (?>) 是否不会与开始标签出现在同一行?是否有任何行包含超过一组<?= ... ?>(甚至是部分)? -
@jhnc 好点。是的,有时会出现这种情况。在这种情况下,也许我应该手动进行,但最好是逐个文件地进行,然后我可以仔细检查。
-
你需要一个可以检测匹配
<?=/?>的工具。最好使用理解模板语言的工具而不是 sed。