2015-03-31 99 views
1

我有一个文件搜索并替换哈希值。我究竟做错了什么?

<?php 
return array(
    'DB' => array(
     'extTablesDefinitionScript' => 'extTables.php', 
     'host' => '172.17.1.47', 

其中172.17.1.47可以是任何东西的开端以下。我想将其设置为的内容更改为$ip中的内容。所以我试过

ip="1.2.3.4" 
sed -i "s/\'host\' => \'.*\',/$ip/g" /tmp/LocalConfiguration.php 
sed -i "s/\(\'host\' => \'\).*/\1$ip\'/g" /tmp/LocalConfiguration.php 

但是不会改变任何东西。

问题

任何人都可以看到什么是错的?或者知道一个更好的方法来做到这一点?

+0

当引号位于搜索字段中时,不需要在'sed'表达式中转义引号。 – 2015-03-31 14:20:45

回答

1

报价似乎被搞砸了。您可以使用:

ip="1.2.3.4" 
sed -i.bak -r "s/('host' => ')[^']*'/\1$ip'/" file.php 
cat file.php 

<?php 
return array(
    'DB' => array(
     'extTablesDefinitionScript' => 'extTables.php', 
     'host' => '1.2.3.4', 
+0

It works =)'[^']'是什么意思? – 2015-03-31 14:23:51

+2

'[^'] *'匹配0或更多任何不是单引号的字符,所以它基本上匹配''''和''' – anubhava 2015-03-31 14:25:20