如何替换包含空格和引号的字符串?

如何替换包含空格和引号的字符串?

我想更换

$config['module_id']['ra']  ='6'  

$config['module_id']['ra']  ='2' 

在文件中,但没有被替换,也没有发生任何事情。

谁能帮我?

答案1

您必须使用 bash 的转义字符(如果您使用 bash)来转义[]我为您提供一个使用 sed 的示例:

sed "s@$config\['module_id'\]\['ra'\] ='6'@$config\['module_id'\]\['ra'\] ='2'@" file

输出:

$config['module_id']['ra'] ='2'

文件包含:

$config['module_id']['ra'] ='6'

答案2

来自AtomiX84的回答,稍微短一点:

sed "s/\(\$config\['module_id'\]\['ra'\]\s*='\)6'/\12'/" file
  • s/代替...
  • \(捕获组开始
  • \$config\['module_id'\]\['ra'\]带有转义字符的字符串$[]
  • \s*='\s*后面跟着任意数量的空格='
  • \)捕获组结束
  • 6'字面上地6'
  • /\12'/通过捕获组进行替换\1并且按字面意思2'

要替换62定的file,请使用选项-i''

sed -i'' "s/\(\$config\['module_id'\]\['ra'\]\s*='\)6'/\12'/" file

要将结果保存到新文件,请使用

sed "s/\(\$config\['module_id'\]\['ra'\]\s*='\)6'/\12'/" file > file.new

相关内容