如何在Shell中读取Java MANIFEST.MF文件的多行值条目?
解决MANIFEST.MF中拆分的Start-Class条目提取问题
你的MANIFEST.MF里Start-Class的值因为超过Manifest规范的72字节限制,被拆成了两行(第二行以空格开头)。之前用的命令没能正确合并这些续行,导致提取结果不完整。
正确命令1:用sed合并续行后提取
sed ':a; N; s/\n //; ta' MANIFEST.MF | awk '/Start-Class/{print $2}'
- sed部分
:a; N; s/\n //; ta:循环读取文件内容,把所有以空格开头的续行合并到上一行,自动去掉换行符和开头的空格。 - awk部分:匹配
Start-Class行,打印冒号后的完整值。
正确命令2:用perl直接提取
perl -0777 -ne 'while (/Start-Class:\s*(.*?)(?=\n\S|\Z)/gs) { print "$1\n" }' MANIFEST.MF
这个命令通过正则直接匹配Start-Class:后的内容,直到遇到下一个非空格开头的行或者文件末尾,一次性提取完整的续行内容。
执行以上任意命令,就能得到完整的Start-Class值:com.spotnana.obt.commissionengine.CommissionEngineApplication
内容的提问来源于stack exchange,提问作者tuk
相关产品推荐
相关产品推荐

