我正在尝试使用此sed来替换字符串:
find . -type f -name "*.php" -exec sed -i "s|\!preg_match(\"\!modules\.php\!\", \\\$_SERVER\['PHP_SELF'\]) \{|\!preg_match(\"\!modules\\\.php\!\", \\\$_SERVER\['PHP_SELF'\])) \{|g" {} ";"
但是我有一条错误消息(配对错误<)
我找不到这样做的好语法。我只想在所有文件的末尾添加一个圆括号...
[编辑] 好的发现了......
find . -type f -name "*.php" -exec sed -i "s|\!preg_match(\"\!modules\\\.php\!\", \\\$_SERVER\['PHP_SELF'\]) {|\!preg_match(\"\!modules\\\.php\!\", \\\$_SERVER\['PHP_SELF'\])) {|g" {} ";"
答案 0 :(得分:0)
使用单引号而不是双引号来转义从bash传递给命令行的正则表达式和其他编程语言结构......
答案 1 :(得分:0)
简单的引用和assuminf $ SERVER是litteral
sed -i 's|!preg_match("!modules\.php!", \$_SERVER\['"'"'PHP_SELF'"'"'\]) {|!preg_match("!modules\.php!", \$_SERVER\['"'"'PHP_SELF'"'"'\])) {|g'
我删除了!,正常!应该没有逃脱
我也建议简化
sed -i 's|\(!preg_match("!modules\.php!", \$_SERVER\['"'"'PHP_SELF'"'"'\])\) {|\1) {|g'