我需要用sed
的单引号替换文字,我无法让它工作。这是我的代码;你能救我吗?
我有一个这种格式的文本文件:
#sometext
$configuration_TEstbk2_bk2_environment12 = 'lalala'
$configuration_TEstbk2_bk2_envoronment12 = 'lalala1'
$configuration_TEstbk2_bk2_staging12 = 'BACKUP 2'
$configuration_waq4faw4f_q4fq4qg4f = 'r234rq43rq4rqr'
$configuration_alice_StagingTEstBk_bk = 'testebk'
$configuration_deployment_overlays_alice_TEStStngDir = 'some'
$configuration_arefgqrqgrq_341q34tq34t = '134t135'
我需要做类似的事情:
sed s/$configuration_arefgqrqgrq_341q34tq34t ='134t135'/$configuration_arefgqrqgrq_341q34tq34t = 'NEWVALUE'/g
我尝试过使用sed
的许多组合,但我找不到有效的组合。
答案 0 :(得分:1)
这对你有用吗?
sed "/\$config_deployment_overlays_alice_arefgqrqgrq_341q34tq34t_staging/s/'134t135'/'NEWVALUE'/" file
答案 1 :(得分:0)
我可能会使用:
sed '/$configuration_arefgqrqgrq_341q34tq34t *=/'"s/'134t135'/'NEWVALUE'/"
它在shell级别使用单引号和双引号的混合来获取sed
的正确信息。单引号包含包含$configuration_arefgqrqgrq_341q34tq34t
的行的搜索条件,后跟一些空格和等号。这可以避免shell扩展可能是shell变量的名称(但可能不是,因此空字符串将被替换)。然后我在shell级别切换到双引号,以便sed
看到单引号:它用单引号中的值替换替换值,但仅替换包含给定配置参数名称的那些行。
我希望用户永远不必输入那些配置参数名称。
答案 2 :(得分:0)
我想你的问题在于引用。你可以使用复杂的引用来确保所有内容都是单引号,除了需要用双引号引用的单引号:
sed 's/$configuration_arefgqrqgrq_341q34tq34t *= *'"'134t135'"'/$configuration_arefgqrqgrq_341q34tq34t = '"'NEWVALUE'/g"
...或者您可以使用一些临时变量来使整个事物更具可读性,并且适合包含在一对双引号中:
directive='$configuration_arefgqrqgrq_341q34tq34t'
oldvalue="'134t135'"
newvalue="'NEWVALUE'"
sed "s/$directive *= *$oldvalue/$directive = $newvalue/g"
(如果您只期望一场比赛,则/g
标志是多余的。)
答案 3 :(得分:0)
您还可以通过捕获它们来完全避免匹配引号:
sed '/$configuration_arefgqrqgrq_341q34tq34t/{
s/\(= *.\).*\(.\) *$/\1NEWVALUE\2/
}' input
答案 4 :(得分:0)
这可能适合你(GNU sed):
sed -r 's/^(\$\S+\s=\s'\'').*('\'')/\1NEWVALUE\2/' file