2015-04-17 57 views
1

我正在尋找一個健全的方式挖空bash中的一種功能的文件中刪除文本塊,我不能肯定如何使用SED(雖然我覺得無論是awk或者sed將是刪除這麼多數據這裏最好的解決方案)從使用bash

我有一個在他們

.... 

function InstallationCheck(prefix) { 
if (system.compareVersions(system.version.ProductVersion, '10.10') < 0 || system.compareVersions(system.version.ProductVersion, '10.11') >= 0) { 
    my.result.message = system.localizedStringWithFormat('ERROR_0', '10.10'); 
    my.result.type = 'Fatal'; 
return false; 
} 
return true; 
} 

function VolumeCheck(prefix) { 
if (system.env.OS_INSTALL == 1) return true; 
var hasOS = system.files.fileExistsAtPath(my.target.mountpoint + "/System/Library/CoreServices/SystemVersion.plist"); 
if (!hasOS || system.compareVersions(my.target.systemVersion.ProductVersion, '10.10') < 0 || system.compareVersions(my.target.systemVersion.ProductVersion, '10.11') >= 0) { 
    my.result.message = system.localizedStringWithFormat('ERROR_0', '10.10'); 
    my.result.type = 'Fatal'; 
    return false; 
} 
if (compareBuildVersions(my.target.systemVersion.ProductBuildVersion, '14A388a') < 0) { 
    my.result.message = system.localizedString('ERROR_2'); 
    my.result.type = 'Fatal'; 
    return false; 
} 
if (compareBuildVersions(my.target.systemVersion.ProductBuildVersion, '14B24') > 0) { 
    my.result.message = system.localizedString('ERROR_2'); 
    my.result.type = 'Fatal'; 
    return false; 
} 
return true; 
} 

.... 

這些功能塊,我想他們最終會像這雖然

function InstallationCheck(prefix) { 
return true; 
} 

function VolumeCheck(prefix) { 
return true; 
} 

什麼是實現這一目標的最優化的方式文件?

編輯

所以每個人都知道,有這個文件應該保持不變內的其他功能。

回答

2

隨着GNU sed的:

sed '/^function \(InstallationCheck\|VolumeCheck\)(/,/^ return true;/{/^function\|^ return true;/p;d}' file 

輸出:

 
.... 

function InstallationCheck(prefix) { 
return true; 
} 

function VolumeCheck(prefix) { 
return true; 
} 

.... 

或者具有相同的輸出:

# first line (string or regex) 
fl='^function \(InstallationCheck\|VolumeCheck\)(' 

# last line (string or regex) 
ll='^ return true;' 

sed "/${fl}/,/${ll}/{/${fl}/p;/${ll}/p;d}" file 
+0

這將如何影響,THI其他功能雖然文件?看看你是如何匹配'函數'我相信它會推動文件內的所有其他功能。 – ehime

+0

我已經更新了我的答案。 – Cyrus

+0

upvoted和接受,謝謝 – ehime

0
$ cat tst.awk 
inFunc && /^}/ { print " return true;"; inFunc=0 } 
!inFunc 
$0 ~ "function[[:space:]]+(" fns ")[[:space:]]*\\(.*" { inFunc=1 } 

$ awk -v fns='InstallationCheck|VolumeCheck' -f tst.awk file 
.... 

function InstallationCheck(prefix) { 
    return true; 
} 

function VolumeCheck(prefix) { 
    return true; 
} 

....