首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sed中转义字符

问在sed中转义字符
EN

Stack Overflow用户
提问于 2014-04-28 23:31:59
回答 4查看 3.9K关注 0票数 0

我正在尝试用sed替换两个php数据库数组变量的值,但它不能像预期的那样工作

下面是一个示例:

代码语言:javascript
复制
echo \$DB['TYPE']='MYSQL' | sed "s|^$DB['TYPE']=.*$|$DB['TYPE']='POSTGRESQL'|g"

我正在尝试取代$DB['TYPE']='MYSQL' with $DB['TYPE']='POSTGRESQL'

我用这种方法逃脱了它,但不起作用,我一直在获取$DB[TYPE]=MYSQL

代码语言:javascript
复制
echo \$DB['TYPE']='MYSQL' | sed "s|^\$DB[\'TYPE\']=.*$|\$DB[\'TYPE\']=\'POSTGRESQL\'|g"

提前感谢

EN

回答 4

Stack Overflow用户

发布于 2014-04-28 23:33:41

我正在试着取代$DB['TYPE']='MYSQL' with $DB['TYPE']='POSTGRESQL'

您可以使用:

代码语言:javascript
复制
sed "s|\(\$DB\['TYPE'\]=\)'MYSQL'|\1'POSTGRESQL'|g" file
票数 0
EN

Stack Overflow用户

发布于 2014-04-28 23:40:09

尽可能减少重复:

代码语言:javascript
复制
$ echo "\$DB['TYPE']='MYSQL'" |
  sed  "s|^\(\$DB\['TYPE'\]='\)[^']*|\1POSTGRES|"
$DB['TYPE']='POSTGRES'

您使用行锚,因此g修饰符是无用的--模式每行最多只能匹配一次。

您需要在echo行上使用双引号。如果没有它们,shell会将单引号视为引号字符,而不是原义字符:

代码语言:javascript
复制
$ echo \$DB['TYPE']='MYSQL' 
$DB[TYPE]=MYSQL
票数 0
EN

Stack Overflow用户

发布于 2014-04-28 23:46:02

在你的例子中sed doen找不到确切的短语,为什么你不像这样交换你想交换的单词

代码语言:javascript
复制
echo \$DB['TYPE']='MYSQL' | sed "s|MYSQL|POSTGRESQL|g"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23345157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档