Java Grep从MANIFEST.MF文件导出包
我需要帮助从OSGi MANIFEST.MF文件中grep导出的包。 例如,从以下文件:Java Grep从MANIFEST.MF文件导出包,java,bash,grep,osgi,Java,Bash,Grep,Osgi,我需要帮助从OSGi MANIFEST.MF文件中grep导出的包。 例如,从以下文件: Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: MyBundle Bundle-SymbolicName: mybundle Bundle-Version: 1.0.0 Import-Package: org.osgi.framework;version="1.6.0", org.osgi.util.tracker;version=
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: MyBundle
Bundle-SymbolicName: mybundle
Bundle-Version: 1.0.0
Import-Package: org.osgi.framework;version="1.6.0",
org.osgi.util.tracker;version="1.3.1"
Export-Package: foo.bar.bla,
foo.bar.blo,
foo.bor.ble,
foo.bor.bli
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-Activator: foo.bar.bla.Activator
我需要得到:
foo.bar.bla
foo.bar.blo
foo.bor.ble
foo.bor.bli
我们必须记住,最后一个包后面的以下标记可能是Bundle RequiredExecutionEnvironmen或Bundle Activator,或任何其他标记
编辑:
与:
我得到:
org.osgi.util.tracker;version="1.3.1"
foo.bar.bla
foo.bar.blo
foo.bor.ble
foo.bor.bli
它不应该检索org.osgi.util.tracker;version=“1.3.1”我建议您使用
- 执行
bnd选择--header导出包my.jar
对“使用命令行”这一问题感兴趣的人的老答案 这不是Grep的工作,因为Grep是逐行排序的,这是awk或sed的工作
echo "Export-Package: foo.bar.bla,
foo.bar.blo,
foo.bor.ble,
foo.bor.bli
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
" | cat MANIFEST.MF | awk '/Export-Package:(.*)/ {print $2; flag=1; next} flag && /:/ {flag=0;next} flag {print}' | sed 's/,//g'
找到行“Export-Package”并捕获后面的内容“:”/Export-Package:(.*)/
打印出捕获的组并将标志设置为true。跳过此行规则的其余部分{print$2;flag=1;next}
当设置了标记,且行中包含“:”标记&&/:/
将平面设置为false,并跳过此行的其余规则{flag=0;next}
如果标志为真标志
打印该行{print}
但是,这不包括诸如word wraps之类的边缘情况(谢谢),虽然我们可以使awk程序更复杂,但如果其他人已经创建了一个应用程序来实现这一点,这是浪费时间(谢谢) 一定要让我们知道您尝试了什么StackOverflow是一个问答网站。你想问一个问题吗?问题是我如何做我上面解释的。不幸的是,这不是因为根据JAR文件规范,MANIFEST.MF的行必须以72字节包装,并且它们在下一行以两个空格缩进继续。这可以拆分包名。因此,任何搜索工作都必须经过编程才能理解这种格式,并将这些行重新连接在一起。我试图了解awk是如何工作的。上面命令的结果不完全是我需要的。@mlk-不是。问题是它还将返回org.osgi.util.tracker;version=“1.3.1”,它不是导出的包。我已在问题的末尾添加了命令的结果。查看EDIT.Updated文件。不包括@NeilBartlett提到的案例
echo "Export-Package: foo.bar.bla,
foo.bar.blo,
foo.bor.ble,
foo.bor.bli
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
" | cat MANIFEST.MF | awk '/Export-Package:(.*)/ {print $2; flag=1; next} flag && /:/ {flag=0;next} flag {print}' | sed 's/,//g'