Sed问题(正则表达式语法)

时间:2014-02-18 15:10:58

标签: sed

我正在尝试使用此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" {} ";"

2 个答案:

答案 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'