我想知道一个命令来仅从该文件的第 8 行中提取值,减去 <string>
和 </string>
, 换句话说只输出 3.2.2
<?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>BuildVersion</key>
<string>8</string>
<key>CFBundleShortVersionString</key>
<string>3.2.2</string>
<key>CFBundleVersion</key>
<string>399.12</string>
<key>ProjectName</key>
<string>ServerApp</string>
<key>SourceVersion</key>
<string>399012000000000</string>
</dict>
</plist>
非常感谢您的建议!谢谢,丹
最佳答案
如 Steven Penny 所述和链接RegEx match open tags except XHTML self-contained tags , 要解析 XML,需要一个合适的 xml 解析器,其中之一是 xmllint
$ xmllint --xpath '/plist/dict/string[2]/text()' file.xml
或使用 xmlstarlet :
$ xmlstarlet sel -t -v '/plist/dict/string[2]/text()' file.xml
或使用 saxon-lint :
$ saxon-lint --xpath '/plist/dict/string[2]/text()' file.xml
还有一个更好的 XPath 表达式,如果你想在 CFBundleShortVersionString
之后的版本号:
'//key[text()="CFBundleShortVersionString"]/following-sibling::string[1]/text()'
关于xml - Grep 仅一行,然后删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27475381/