我正在尝试使用sed从构建文件中删除条件块,但到目前为止它没有用。
我要删除的块是每次出现的“ if(!isFoss()){...}”。
这是我正在处理的文本示例:
repositories {
google()
if (!isFoss()) {
maven {
url 'https://maven.fabric.io/public'
}
}
if (!isFoss()) {
something {
url 'https://anotherurl.test/public'
}
}
}
Run Code Online (Sandbox Code Playgroud)
所需的输出是:
repositories {
google()
}
Run Code Online (Sandbox Code Playgroud)
我尝试过
sed '/!isFoss()/!b;:A;N;;/\n}/!{s/\n.*//;bA}'
Run Code Online (Sandbox Code Playgroud)
但它的行为不可靠(通常会留下条件或最后一个括号)。
我不认为,这是一种简单的方法,因为您需要解析输出。但是,如果您在编写这些“存储库文件”时非常严格,则可能会有所帮助:
$ awk 'd==0{m=0} /!isFoss()/{m=1} m==1&&/{/{d++} d==0{print} m==1&&/}/{d--}' file
repositories {
google()
}
Run Code Online (Sandbox Code Playgroud)
m是一个标志,表明您已找到匹配项。d在上递增{和递减}。不过,您必须查看所有更改。