如何修正Bash脚本中ERE正则表达式的grep过滤无输出问题
解决Bash脚本中grep匹配freq_rank≥910无输出的问题
你的问题出在用正则匹配数值范围时逻辑不完整,比如只覆盖了910-999的情况,漏掉了1000及以上的数值,或者没有限定列的边界导致匹配错误。以下是修正后的脚本和说明:
修正后的script.sh内容
#!/bin/bash # 筛选符合三个条件的行:年份2010/2011、freq_rank≥910、country≠"all countries" grep -E '^201[01],(9[1-9][0-9]|[1-9][0-9]{3,}),' headlines_words.csv | grep -v '"all countries"'
各部分逻辑说明
匹配年份2010/2011:
^201[01],^锚定行首,确保匹配的是第一列的年份201[01]匹配2010或2011,后面的逗号限定为整列内容
匹配freq_rank≥910:
(9[1-9][0-9]|[1-9][0-9]{3,}),9[1-9][0-9]匹配910-999的三位数[1-9][0-9]{3,}匹配1000及以上的多位数- 末尾的逗号确保匹配的是独立的freq_rank列,不会误匹配其他列中的数字
排除country为"all countries"的行:
grep -v '"all countries"'-v表示反向匹配,即排除包含指定内容的行- 如果你的csv中country列没有双引号,去掉引号即可,改为
grep -v 'all countries'
注意事项
如果你的csv列顺序不是「年份,freq_rank,country」,需要调整正则中的逗号位置。比如若freq_rank是第三列,年份是第一列,正则要改为:
grep -E '^201[01],[^,]*,((9[1-9][0-9]|[1-9][0-9]{3,})),' headlines_words.csv | grep -v '"all countries"'
内容的提问来源于stack exchange,提问作者Uri
相关产品推荐
相关产品推荐

