You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux如何用grep筛选含首尾字母相同(不区分大小写)单词的行

问题描述

我有如下格式的文本文件passwords.txt,其中每列的每个单词都是一个8位密码:

sie%Qu7s Kuux"oh9 ohc9ahG% hoe8Toh: Eix*ohd1 doh:bo2U Cu0doo|t zo`L9xaW
fie5Du[h Phe8aid# Opu&fai5 ieZ<aek6 hu4ga&Di Oose}p1p aiD@oos2 nu-a1Fub
ahqu5To/ ahtie[H3 ioK&u5Ai nei1Za#d poo_Th9r gu|aGh7h uZ%io2ah IeNah&v7
eif\e8AE Ieb,ing4 reph1oW* eeSh'ee8 Ah+ei4ai Oi0Ca,vu Esh1xe?e Wei&k4ic
ue5OhQu. aaf-i8uP eedae%T5 sei?M9Pu ieH[oh2l ieh~ah8A aev"oo9A Ohf"i8de
Foh:x2zi aLoo'qu2 Ia6aig-e La{vie1E IeFoh{cI Au_h7Hee Se)f4ebi Cah$yu7m

我需要打印其中包含任意一个首尾字母相同的单词的行,匹配时不区分字母大小写。我尝试使用如下grep命令实现:

cat passwords.txt | grep -e ' \([A-Z]\)......\1 ' -e ' \([a-z]\)......\1 '

但该命令只能匹配首尾字母大小写完全相同的单词,无法满足不区分大小写的需求,例如如下行应该被匹配:

Foh:x2zi aLoo'qu2 Ia6aig-e La{vie1E IeFoh{cI Au_h7Hee Se)f4ebi Cah$yu7m

我的预期输出结果如下:

eif\e8AE Ieb,ing4 reph1oW* eeSh'ee8 Ah+ei4ai Oi0Ca,vu Esh1xe?e Wei&k4ic
    sie%Qu7s Kuux"oh9 ohc9ahG% hoe8Toh: Eix*ohd1 doh:bo2U Cu0doo|t zo`L9xaW
    ue5OhQu. aaf-i8uP eedae%T5 sei?M9Pu ieH[oh2l ieh~ah8A aev"oo9A Ohf"i8de
    Foh:x2zi aLoo'qu2 Ia6aig-e La{vie1E IeFoh{cI Au_h7Hee Se)f4ebi Cah$yu7m
    ahqu5To/ ahtie[H3 ioK&u5Ai nei1Za#d poo_Th9r gu|aGh7h uZ%io2ah IeNah&v7
解决方案

核心是给grep加-i参数实现大小写不敏感匹配,无需分开写大小写匹配规则,正确命令如下:

grep -i '\([a-z]\).\{6\}\1' passwords.txt

参数解释:

  • -i:开启大小写忽略模式,匹配时A和a会被判定为相同字符
  • \([a-z]\):捕获单词的第一个字母,因为有-i参数,无需额外匹配大写字母
  • .{6}:匹配8位密码中间的任意6个字符
  • \1:反向引用第一个捕获的字母,大小写不一致也能成功匹配

如果要避免误匹配单词内部的8个字符组合,可以加边界校验,只匹配被空格分隔、或位于行首行尾的独立密码:

grep -i '\(^\| \)\([a-z]\).\{6\}\2\( \|$\)' passwords.txt

执行上述命令即可得到预期的输出结果。


内容的提问来源于stack exchange,提问作者DOS HASAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:24:05