我需要帮助找出一个命令,该命令将搜索文件并显示包含 [a-f0-9] 中每个字符恰好 2 个的行。
有效匹配示例:
33 e0 f1 76 9c 4f a8 6c 01 5d 45 9e 28 db 7b 2a
无效匹配示例:
c0 b0 f5 60 02 8b 1c a4 41 7c 53 f2 85 20 a0 d1
我尝试了
'(?:[0-9a-f])?^[^\1]*\1[^\1]*\1[^\1]*$'
,但它显然行不通,因为你不能否定这样的反向引用,即使我纠正它,我也不确定这是正确的方法。
Perl 脚本可能会解决您的问题
perl -ne 'print if grep {($_ =~ tr/$_//) == 2} m/([a-f0-9])/g' file.txt
其工作原理如下:
perl -ne
:这会调用 Perl 并告诉它逐行读取输入文件,为每一行执行提供的脚本。print if
:如果后面的条件为真,这会告诉 Perl 打印当前行 ($_
)。grep {($_ =~ tr/$_//) == 2} m/([a-f0-9])/g
:这是 Perl 中的 grep 命令,用于检查 [a-f0-9] 中的每个字符并计算它们在该行中的出现次数。如果计数恰好为 2,则返回 true,并打印该行。