SED 查找并替换以 $ 开头的确切单词

SED 查找并替换以 $ 开头的确切单词

我的 php 文件有一些使用 $downtime_hosts 定义的变量,我需要的是一个命令来查找并替换整个 $downtime_hosts = 8;变量,而不影响文件中多次使用的$downtime_hosts = 15;其他变量。$downtime_hosts

这里我的号码 8,15,16 可能随时改变,我需要的是找到以 $downtime_hosts = newinteger 开头的行$downtime_hosts = anyinteger并简单地替换为我的新行 $downtime_hosts = newinteger 。请注意anyinteger / newinteger=2,3,4,15或任何

$downtime_hosts = 8;

$total_hosts = $all_hosts - $downtime_hosts;

if ($host_up == $total_hosts )

Hosts under downtime $downtime_hosts `

任何意见都非常受欢迎!

答案1

sed 's/$downtime_hosts = 8;/$downtime_hosts = 15;/' file.php

$不会造成任何问题,因为除非在模式末尾找到它,否则它不会充当锚点。该sed脚本确实需要用单引号引起来,否则 shell 会尝试扩展$downtime_hosts为 shell 变量。

仅匹配行开头的模式:

sed 's/^$downtime_hosts = 8;/$downtime_hosts = 15;/' file.php

如果整数 8 可以是任意整数:

sed 's/^$downtime_hosts = [0-9]*;/$downtime_hosts = 15;/' file.php

要将整数替换为 shell 变量保存的整数$newint

sed "s/^\$downtime_hosts = [0-9]*;/\$downtime_hosts = $newint;/" file.php

请注意,我们现在必须在sed编辑脚本周围使用双引号,以便 shell 扩展$newint变量。这也意味着我们被迫逃离现有的两个$外壳。

相关内容