如何使用egrep实现CSV同一列多区间及并列条件筛选需求
egrep筛选多条件CSV的实现方案
实现命令
方式一:管道叠加egrep实现AND逻辑(兼容性最强,无额外依赖)
将多个需要同时满足的条件拆分为独立的egrep匹配,管道串联即可实现AND逻辑:
egrep '^([^,]*,){2}(2[0-9]|4[0-9]),' titanic-passengers.csv | egrep '^([^,]*,){7}[^,]*(eng.*fra|fra.*eng)[^,]*'
方式二:单条egrep命令实现(需支持PCRE正则,加-P参数即可)
egrep -P '^(?=([^,]*,){2}(2[0-9]|4[0-9]),)(?=([^,]*,){7}[^,]*(eng.*fra|fra.*eng)[^,]*)' titanic-passengers.csv
语法说明
- 定位列位置:
([^,]*,){N}代表匹配连续N个以逗号结尾的列,^([^,]*,){2}匹配前两列,后面紧跟的就是第三列(年龄列),^([^,]*,){7}匹配前七列,后面紧跟的就是第八列(语言列),避免匹配到其他列的符合条件的字符 - 年龄条件:
(2[0-9]|4[0-9])匹配20-29或40-49的两位数年龄 - 语言条件:
(eng.*fra|fra.*eng)覆盖英语、法语的两种先后顺序,保证第八列同时存在两种语言标识
原有命令的问题修正
- 年龄部分的
[2-0][0-9]写法错误:字符类范围必须从小到大,2-0是无效范围,且未固定第三列位置,会错误匹配其他列的数字 - 语言部分的
[eng.*]是字符类语法,仅匹配e、n、g、.、*单个字符,无法匹配完整的语言标识,也未固定第八列位置
内容的提问来源于stack exchange,提问作者Xams
相关产品推荐
相关产品推荐

