大家好,我正在尝试使用AWK从XML文件中提取version=
值pkg-info
。
我想做些类似的事情:
cat file_below.txt | awk some_commands
使用以下数据
<?xml version="1.0" encoding="utf-8"?>
<pkg-info overwrite-permissions="true" relocatable="false" identifier="com.application.something" version="1.2.3" format-version="2" generator-version="ABC" install-location="/Applications" auth="root">
</pkg-info>
所需的输出将是:
1.2.3
先感谢您
假设标签内没有换行符
gawk/mawk/mawk2 'BEGIN { FS = "version=\"" } /^[<]pkg-info/ {
print substr($2, 1, index($2, "\"") -1 ); exit; }'
处理随机\ n的版本
gawk/mawk/mawk2 'BEGIN { FS="version=\"" } (NF > 1) {
if (seen++) { print substr($2,1,index($2, "\"")-1); exit; } }'
它将在首次看到版本时跳过初始XML标签。第二次打印版本号,然后退出。除了用双引号引起来,此代码无需假设版本号的格式。
版本说明pkg-info遍布各地:
gawk/mawk/mawk2 'BEGIN { RS = "^$"; FS = "([<]pkg-info|[\/]pkg-info[>])";
} match($2, /version=[^ ]+/) {
print substr($2, RSTART + 9, RLENGTH - 10); exit; }'
只是将其读入整个XML文件,而不是尝试沿NL拆分内容。然后,当您强制将FS确切地用作FS的打开和关闭标签时,则$ 2必须是此类标签的第一次出现。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句