Sed替换文本

时间:2013-04-12 20:26:20

标签: sed

我需要用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的许多组合,但我找不到有效的组合。

5 个答案:

答案 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