【发布时间】:2021-04-27 20:03:26
【问题描述】:
我正在尝试创建一个 grep 正则表达式模式,它允许我从以下 csv 文件的 mass(g) 列中获取所有低于 100 的值(包括浮点数)。
我需要使用 grep,最好是 BRE(基本正则表达式模式),我不能使用 cut 来指定我感兴趣的列。
我现在拥有的是:
,\d{2},|,\d{2}.\d*,
此命令在我的 Ubuntu 命令行中不起作用(尽管当我在 https://regex101.com/ 中检查它时它似乎是正确的
谁能帮助我用 BRE 模式解决这个问题?
名称、id、名称类型、recclass、质量(g)、fall、year、reclat、reclong、GeoLocation
Aachen,1,Valid,L5,21,Fell,01/01/1880 12:00:00 AM,50.775000,6.083330,"(50.775; 6.08333)"
Aarhus,2,Valid,H6,720,Fell,01/01/1951 12:00:00 AM,56.183330,10.233330,"(56.18333; 10.23333)"
Abee,6,Valid,EH4,107000,Fell,01/01/1952 12:00:00 AM,54.216670,-113.000000,"(54.21667; -113.0)"
Acapulco,10,Valid,Acapulcoite,1914,Fell,01/01/1976 12:00:00 AM,16.883330,-99.900000,"(16.88333; -99.9)"
【问题讨论】:
-
试试
grep -o ',[0-9]\{2\}\(\.[0-9]*\)\{0,1\},' file或grep -oE '\<[0-9]{2}(\.[0-9]+)?\>' file -
为什么你只能使用
grep来解析CSV?您的预期输出是什么? -
ideone.com/6H9riY 会为你工作吗?
-
嘿维克托!非常感谢您的回答!所以我想我需要用 grep 来学习它的语法(并在过程中丢失一些)所以你的正则表达式有效,但不幸的是它也匹配 lat 和 long 列。 @WiktorStribiżew
-
与此同时,我提出了这种正确定义数字范围的模式 grep "\,[[:digit:]]\{1,2\}\,\|\,[ [:digit:]]\{1,2\}\.[[:digit:]]\+\," datosMeteoritos.csv 但它也匹配我不感兴趣的列。关于如何解决这个问题的任何想法?
标签: regex command-line grep