如何用awk筛选第二个或第三个字符为元音的单词?解决漏匹配问题
解决awk筛选单词的问题
需求回顾
从t.txt中筛选出**第二个字符或第三个字符为元音(a、e、i、o、u)**的单词,t.txt内容:
test platform axis welcome option
原命令的问题
原命令awk 'substr($0,2,1) == "e" {print $0}' t.txt仅匹配了第二个字符为e的情况,既没有覆盖全部元音,也未考虑第三个字符为元音的场景,因此漏掉了platform(第三个字符为a)和axis(第三个字符为i)。
正确命令及说明
方法1:用substr结合正则匹配
awk 'substr($0,2,1) ~ /[aeiou]/ || substr($0,3,1) ~ /[aeiou]/' t.txt
substr($0,2,1)提取第二个字符,~ /[aeiou]/判断该字符是否属于元音集合substr($0,3,1)提取第三个字符,同样判断是否为元音||表示逻辑或,满足任一条件即输出该行
方法2:用整行正则匹配更简洁
awk '/^.[aeiou]/ || /^..[aeiou]/' t.txt
^.[aeiou]:匹配行首后第二个字符为元音的情况(^表示行首,.匹配任意单个字符)^..[aeiou]:匹配行首后第三个字符为元音的情况- 通过
||实现“或”逻辑,满足任一规则即输出
执行结果
运行上述命令后,输出符合条件的单词:
test platform axis welcome
内容的提问来源于stack exchange,提问作者shantanuo
相关产品推荐
相关产品推荐

