shell regex:提取价格
发布时间:2020-12-16 01:58:41 所属栏目:安全 来源:网络整理
导读:鉴于以下价格清单,我试图弄清楚如何标准化/仅提取数字. INPUT DESIRED_OUTPUTCA$1399.00 1399.00#36;1399.11 1399.11$1,399.22 1399.22Z$1 399.33 1399.33$1399.44# 1399.44C$1399.55 1399.551,399.66 1399.661399.77 1399.77,1399.88 1399.8825 1399.88 139
鉴于以下价格清单,我试图弄清楚如何标准化/仅提取数字.
INPUT DESIRED_OUTPUT CA$1399.00 1399.00 $1399.11 1399.11 $1,399.22< 1399.22 Z$1 399.33 1399.33 $1399.44# 1399.44 C$1399.55 1399.55 1,399.66 1399.66 1399.77 1399.77,1399.88 1399.88 25 1399.88 1399.88 399.99 399.99 88.88 99.99 99.99 (if >2 matches on one line,only the last one matters) .1399.88 DO NOT MATCH (not a price; too many ".") 666.000 DO NOT MATCH (not a price: too many 0's) 我想开始的是他们都有共同点的好主意: >价格始终包含.NN,但从不包含.NNN 经过进一步检查,其他规则变得明显: > .NN必须以一个或多个数字开头. 我正在寻找sed,grep和awk以获得便携而有效的解决方案.我该如何处理这个问题呢? 我找到了similar question,但我不知道如何使用sed尝试以下正则表达式: ^d+(,d{1,2})?$ 编辑:是的,我的输入格式可能有点奇怪,因为它是拼接页面串联的结果. 解决方法
您可以使用以下shell脚本:
#/bin/sh grep -v '.d+.' | # get rid of lines with multiple dots within the same number grep -v '.ddd+' | # get rid of lines with more than 2 digits after . sed -e 's/(.*.[0-9][0-9]).*$/1/' | # remove anything after last .NN sed -e 's/^.* ([0-9][0-9][0-9][0-9])./1./' | # "* NNNN." => "NNNN." sed -e 's/^.* ([0-9][0-9])./1./' | # "* NN." => "NN." sed -e 's/^.* ([0-9])./1./' | # "* N." => "N." sed -e 's/^(.*)[,](([0-9]){3,})./12./g' | # "*,NNN." or "* NNN." => "*NNN." sed -e 's/^(.*)[,](([0-9]){6,NNNNNN." or "* NNNNNN." => "*NNNNNN." sed -e 's/^(.*)[,](([0-9]){9,NNNNNNNNN." or "* NNNNNNNNN." => "*NNNNNNNNN." grep -o 'd+.dd' # print only the price 如果数字由空格分隔,或者以3位数字组合,此解决方案最多可以在9位之前运行.如果您需要提取更大的价格,只需添加更多行,将正则表达式中的数字增加3. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何在Scala中将地图序列化为JSON?
- 使用axis开发webservice服务java.net.ConnectException: Co
- angularJs中上传图片/文件功能:ng-file-upload
- 使用强大的可视化工具redislive来监控我们的redis,别让自己
- vim命令使用大全
- filesize – 计算unix终端中特定文件的总空间消耗
- bash – 如果任何命令失败,最后使用非零代码退出shell脚本
- WebService传递XML数据 C#DataSet操作XML 解析WebService返
- 基于Bootstrap的标签页组件bootstrap-tab使用说明
- scala – 使用其他列表中的元素作为参数,对一个列表中的每个