我想更换
$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'
要替换6
给2
定的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