使用bash从文件中删除文本块

时间:2015-04-17 17:42:19

标签: bash sed

我正在寻找一种在Bash中挖空函数的理智方法,我不知道如何使用sed删除这么多数据(虽然我觉得sed或awk会是最好的解决方案)。

我有一个包含这些功能块的文件

....

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

答案 0 :(得分: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

答案 1 :(得分: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;
}

....