grep - 如何在文件中搜索第二个文件中的数字

时间:2014-07-02 20:26:22

标签: regex macos shell scripting grep

我有两个数字列表

file1有姓名和号码

alaska5554443333
california5556667777
hawaii5555559999

file2只有数字,但只有前6个

555333
555999
555222

我如何搜索file1并从file2中取出任何匹配,同时只查看前6个数字,这样我就不会意外地从数字的中间或末尾取出匹配项?

当我有完整的数字时,我使用grep -v -f file2 file1>浏览了该文件。 file3,以便我从file1中提取所有在file2中没有匹配项的名称和数字。

2 个答案:

答案 0 :(得分:1)

您需要预处理file2。

sed 's/^/^[^0-9]+/' < file2 | egrep -v -f - file1

这会在file2中的每个数字前添加正则表达式。该表达式查找一个非数字字符串,后跟file2的每一行中的数字。

egrep然后使用这些模式从file1中排除行。

答案 1 :(得分:0)

我会使用

open NAMESANDNUMS, "<namesandnums.txt" or die $!;
my @namesandnums = <NAMESANDNUMS>;
close NAMESANDNUMS or die $!;

open NUMBERS, "<numbers.txt" or die $!;
my @numbers = <NUMBERS>;
close NUMBERS or die $!;

foreach(@namesandnums) {
    if(/[a-z]+(\d{6})/) {
        my $cnum = $1;
        foreach(@numbers) {
            print $_ if($_ == $cnum);
        }
    }
}