Bash脚本提取文件中data-usd值:cut命令无效求解决方案
解决从HTML文本中提取data-usd值的问题
我来帮你搞定这个提取需求!cut命令在这里不好用主要是因为目标字符串被引号和多类型分隔符包围,且前面的内容长度不固定,咱们换几个更灵活的命令行工具试试:
方法1:使用grep(推荐,简洁精准)
利用grep的Perl正则表达式模式,直接匹配并提取data-usd="后的数值:
grep -oP 'data-usd="\K[^"]+' wynik.txt
-o:只输出匹配到的部分,而非整行-P:启用Perl兼容正则表达式\K:忽略前面匹配到的data-usd="部分,只保留后面的内容[^"]+:匹配所有非引号字符,正好对应你要的24.6933
方法2:使用awk
通过自定义分隔符拆分字符串,定位目标字段:
awk -F '[="]' '{print $6}' wynik.txt
-F '[="]':把=和"作为字段分隔符,拆分整行内容$6:拆分后目标数值正好是第6个字段(如果行结构不变的话)
如果担心行结构变化导致字段位置偏移,可以用更鲁棒的写法:
awk -F '"' '{for(i=1;i<=NF;i++) if($(i-1) ~ /data-usd=/) print $i}' wynik.txt
这段代码会遍历所有字段,找到data-usd=后面的引号包裹内容并输出。
方法3:使用sed
通过替换操作过滤掉无关内容,只保留目标数值:
sed -n 's/.*data-usd="\([^"]*\)".*/\1/p' wynik.txt
-n:关闭默认的整行输出,只打印我们需要的内容s/.*data-usd="\([^"]*\)".*/\1/p:用正则捕获data-usd="和"之间的内容,替换整行为捕获到的数值并打印
为什么cut命令不好用?
cut更适合处理固定分隔符或固定长度字段的场景,而你的HTML行里混合了空格、=、"多种分隔符,且data-usd前面的内容长度不固定,无法通过cut精准定位到目标数值,所以才会失败。
内容的提问来源于stack exchange,提问作者Salim Azeri
相关产品推荐
相关产品推荐

