鍍金池/ 問答/Linux  網(wǎng)絡(luò)安全/ shell腳本修改代碼文件中的指定代碼塊

shell腳本修改代碼文件中的指定代碼塊

怎么用sed,awk等命令在指定代碼塊中插入一行代碼。

假設(shè)有一個文件hello.php,內(nèi)容如下:

<?php
function hello()
{

}
function run()
{
    hello();
}
run();

該如何用sed或者awk等命令,在hello函數(shù)體內(nèi)插入echo 'hello,world';這段代碼,使hello.php修改成如下:

<?php
function hello()
{
    echo 'hello,world';
}
function run()
{
    hello();
}
run();

sed好像只能作用于一行,如果hello函數(shù)的{跟函數(shù)名在同一行,倒是可以考慮把function hello(){替換成,function hello(){echo 'hello,world';來實現(xiàn)這個效果的。


該問題已經(jīng)解決。解決方案是使用php讀取整個文件進行字符替換,然后重新寫入文件的方式來完成的。應(yīng)用場景比較特殊,不能直接在源文件中加入“placeholder”的方案來完成。

實際應(yīng)用場景:Dockerfile從github下載piplin的包,修改app/Providers/AppServiceProvider.php文件,在方法function boot()的代碼塊中加入\URL::forceScheme('https');以啟用https。容器本身搭建的是php網(wǎng)絡(luò)服務(wù)器,已經(jīng)安裝了php組件,因此使用php來完成這件事,是這種情況下比較好的解決方案了。

回答
編輯回答
綰青絲

hello.php 看作一個 template,就好做多了:

  • 在里面放上 placeholder 來方便替換; 或者
  • 直接以 herredoc 的形式放在shell腳本里,把 placeholder 替換成變量,在使用前控制變量的內(nèi)容就可以了
2017年11月22日 02:24
編輯回答
心悲涼

這個用sed是比較困難的,如果你能接受用perl、java、python的話,寫一個相應(yīng)的腳本就簡單多了,雖然長一點,但更容易維護。

2017年6月25日 08:35