grep 命令可将行与组中每个字符恰好匹配 2 个

问题描述 投票:0回答:1

我需要帮助找出一个命令,该命令将搜索文件并显示包含 [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]*$'
,但它显然行不通,因为你不能否定这样的反向引用,即使我纠正它,我也不确定这是正确的方法。

regex grep
1个回答
0
投票

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,并打印该行。
© www.soinside.com 2019 - 2024. All rights reserved.