我的 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
变量。这也意味着我们被迫逃离现有的两个$
外壳。