我有一个填充HTML属性的巨大文本文件。我只想要标签的价值。 例如:
<option value="API" datatype="string" datatype_value="0">API</option>
<option value="Account" datatype="string" datatype_value="0">Account</option>
<option value="Address - asn" datatype="string" datatype_value="0">Address - asn</option>
我只想在“期权价值”之后使用“API”。
现在我有这个:
awk -F "option value=" '{print $2}' /inputFilePath | awk '{print $1}'
我可以在文件的第一行使用 ONLY 。所以当我在文件上面运行上面的命令时,我的输出只返回:
"API"
而不是“帐户”,“地址”或之后的任何内容。
对任何我可能做错的事情都有任何想法?提前谢谢!
答案 0 :(得分:2)
改为修改RS:
awk 'BEGIN { RS = "<option value=\"" ; FS = "\""; } NF { print $1 }' file
输出:
API
Account
Address - asn
我希望它适用于awk
作为nawk
没有。
又一个使用GNU awk:
gawk '{ t = $0; while (match(t, /<option value="([^"]*)"(.*)/, a)) { print a[1]; t = a[2] } }' file
我明确地使用了[^"]*
,因为我发现空值仍然适用于您的查询,但如果愿意,您可以将其更改为[^"]+
。
答案 1 :(得分:0)
症状表明可能是您的<option>
元素位于单行,而不是拥有行上的每个元素。
更新:迄今为止,OP尚未提供有关原始问题的反馈意见,但考虑到无论单行是否包含已接受的答案多个元素或只是一个,上面的猜测很可能
(这个答案最初包含一个次优的sed
解决方案,前两个评论引用 - 我已将其删除。)
功能
如果您可以使用GNU awk
或mawk
,那么 accepted answer是解决特定问题的绝佳解决方案
通常,但是,最好使用专用的HTML / XML解析CLI - 它真正了解数据结构并提供更强大的功能灵活的数据提取方式。
例如,使用多平台网络抓取CLI xidel,解决方案将简化为:
xidel -q -e '//option/@value' file
//option/@value
是一个XPath查询,用于选择跨DOM所有级别的所有value
元素的option
属性(根据需要更具体)。答案 2 :(得分:0)
这适用于所有awk
awk -F"<option value=" '{split($2,a,"\"");print a[2]}' file
API
Account
Address - asn
如果您需要双引号:
awk -F"<option value=" '{split($2,a,"\"");print "\""a[2]"\""}' file
"API"
"Account"
"Address - asn"
答案 3 :(得分:-1)
添加到您的示例代码$ 1~ / API /。
awk -F "option value=" '{print $2}' /inputFilePath | awk '$1 ~ /API/ {print $1}'