如何从iOS的info.plist文件中用grep提取CFBundleVersion的值?
如何用grep从iOS的Info.plist提取CFBundleVersion的值?
先看你提供的示例Info.plist内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleShortVersionString</key> <string>$(MARKETING_VERSION)</string> <key>CFBundleVersion</key> <string>178273</string> <key>NSExtension</key> </dict> </plist>
下面提供几种用grep提取CFBundleVersion对应值的命令:
方法1:针对纯数字版本号
如果你的CFBundleVersion值只会是数字(比如示例中的178273),可以用这个简单的命令:
grep -A 1 "CFBundleVersion" Info.plist | grep -Eo "[0-9]+"
grep -A 1 "CFBundleVersion":找到包含CFBundleVersion的行,并显示该行之后的1行(也就是对应<string>标签的行)grep -Eo "[0-9]+":只输出匹配到的数字部分
方法2:通用版本(支持任意字符的版本号)
如果版本号可能包含点号、字母等其他字符(比如1.2.3-beta),用这个更通用的命令:
grep -A 1 "CFBundleVersion" Info.plist | grep -Eo '>[^<]+<' | tr -d '<>'
grep -Eo '>[^<]+<':提取<string>标签里>和<之间的内容(包括符号)tr -d '<>':去掉多余的尖括号,只保留版本号本身
方法3:单步匹配(需grep支持PCRE)
如果你的grep支持PCRE(Perl兼容正则表达式,比如GNU grep或macOS上通过brew安装的ggrep),可以用一个命令直接提取:
grep -Po '(?<=<key>CFBundleVersion<\/key>\s*<string>)[^<]+' Info.plist
(?<=...)是正向预查,匹配CFBundleVersion的key标签之后的<string>标签开头部分[^<]+匹配直到下一个<之前的所有内容,也就是版本号本身
内容的提问来源于stack exchange,提问作者s-hunter
相关产品推荐
相关产品推荐

