【问题标题】:PHP's preg_quote equivalent in Bash?Bash中的PHP preg_quote等价物?
【发布时间】:2011-09-08 01:45:07
【问题描述】:

我很难让 sed 工作以应用下面的替换操作。

SALT=$(curl -L https://api.wordpress.org/secret-key/1.1/salt/)
#SALT='test' #this of course works fine
#echo $SALT
sed -i "s/salt_here/$SALT/g" wp-config.php

在文件“wp-config.php”中有一行带有单词“salt_here”(不带引号)。但是,$SALT 变量有很多垃圾,所以我收到了这个错误:

sed: -e expression #1, char 78: unknown option to `s'

有没有办法逃脱变量内的所有垃圾(就像php的http://php.net/preg_quote

更新:

这是我能得到的最好的:

SALT=$(curl -L https://api.wordpress.org/secret-key/1.1/salt/ | sed 's/\(\/\|\\\|&\)/\\&/g')
SALT1=`/usr/bin/php << EOF
<?php echo preg_quote("$SALT"); ?>
EOF`
#echo "$SALT1"
cp '/home/public_html/zz_f/wp-config.php' '/home/public_html/zz_f/wp-config_t.php'
sed -i "s/salt_here/$SALT1/g" wp-config.php

但还是报错:

PHP Parse error:  syntax error, unexpected '>', expecting T_VARIABLE or '$' in - on line 3
sed: -e expression #1, char 12: unterminated `s' command

【问题讨论】:

  • 这不可能与 sed 表达式周围的单引号一起使用。 Bash 不会替换 $SALT 的值。
  • 我的错误:它现在在双引号内。

标签: php bash sed


【解决方案1】:

我正在编写一个 bash 脚本来自动化 wp 安装 && 我也遇到了这个问题。

我注意到的一件事是你可能想试试这个:

sed -i 's/salt_here/'$SALT'/g' wp-config.php

我在传递变量时也遇到了问题,但是在变量周围添加引号似乎可以解决这个问题 [注意:不是 sed 或 bash 专家,所以不确定这将如何翻译带双引号 .. ]

【讨论】:

    【解决方案2】:

    使用 sed 引用它。

    SALT=$(curl -L https://api.wordpress.org/secret-key/1.1/salt/ | sed 's/\(\/\|\\\|&\)/\\&/g' )
    

    【讨论】:

    • 但是当我尝试运行 sed -i 's/salt_here/$SALT/g' wp-config.php 时,它会返回同样的错误:sed: -e expression #1, char 147: unterminated s' command`
    • 嗯,这不是同一个错误。之前它被终止得太早,现在它根本没有被终止。尝试回显最后一个命令,而不是运行它来找出发生了什么。
    • 我已根据 hakre 链接到的问题的已接受答案编辑了我的答案。显然,转义数字是一个错误,我不知道是否还有其他我不应该转义的东西。
    • 这是我现在得到的错误:sed: -e expression #1, char 107: unterminated s' command`
    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    相关资源
    最近更新 更多