如何使用grep/sed/awk筛选单词数在X-Y区间内的文本行
筛选指定单词数范围文本行的实现方法
以下是通过常用命令行工具实现需求的方法,默认以空白字符(空格、制表符等)作为单词分隔符:
最简便方案:awk 实现
awk 内置字段计数变量NF直接对应每行的单词数,直接根据数值范围筛选即可,命令模板如下:
# 将X替换为最小单词数,Y替换为最大单词数,替换文件路径为你的实际文件 awk 'NF>=X && NF<=Y' 你的文件路径
针对你给出的示例文件,若需要筛选单词数在2到7之间的行,执行以下命令即可得到预期结果:
awk 'NF>=2 && NF<=7' atom.txt
运行后输出内容如下:
download kali linux virtualbox how to install kali linux in vmware install kali linux on virtualbox kali linux kali linux install virtualbox
grep 实现方案
通过正则匹配控制单词数量范围,命令模板如下:
# 最小单词数为X、最大为Y时,将{和}之间的第一个数改为X-1,第二个改为Y-1 grep -E '^(\S+\s+){X-1,Y-1}\S+$' 你的文件路径
对应示例的2-7单词数筛选命令:
grep -E '^(\S+\s+){1,6}\S+$' atom.txt
sed 实现方案
和grep正则逻辑一致,匹配到符合规则的行后打印即可,示例命令如下:
sed -nE '/^(\S+\s+){1,6}\S+$/p' atom.txt
补充说明
- 如果文本中存在标点和单词绑定的情况(如
linux,),系统会默认识别为一个单词。如果需要剥离标点后统计,可以先清洗文本再筛选,示例如下:
tr -d '[:punct:]' < atom.txt | awk 'NF>=2 && NF<=7'
内容的提问来源于stack exchange,提问作者Technology EFX TV
相关产品推荐
相关产品推荐

