Grep Lines,按图案单词顺序排序

时间:2015-01-30 12:34:16

标签: regex bash grep

基于我的单词的grep数据是否可能不按输入文件的顺序排序?!
例如:假设这是我的输入文件: -

AAA
BBB
CCC
DDD
EEE

现在我想提取AAA,CCC,DDD,EEE订购如下:

CCC
AAA
EEE
DDD

我尝试使用以下命令,但当然它不起作用: -

$ Grep -rhi "CCC\|AAA\|EEE\|DDD"
$ Grep -hi "CCC\|AAA\|EEE\|DDD" input
AAA
CCC
DDD
EEE

请记住,我想要提取的数据比上面的示例复杂得多,因为它中包含一些重定向/管道/引用字符,而且更多,我从几十个(可能是数百个)几乎具有完全相同行的前缀的文件中提取数据...
所以,关键在于NoWay可以使用像sort或任何类似物这样的东西来按任意顺序对线进行排序。

请告诉我如果我应该发布任何其他信息 在此先感谢

1 个答案:

答案 0 :(得分:0)

您可以尝试使用,解析输入字符串并将数据保存在数组中,然后解析输入文件并将每一行保存为哈希的键,现在您可以遍历数组并仅打印匹配哈希的行,如:

perl -e '
    @input = split /\\\|/, shift;
    open $fh, "<", shift;
    while ( $line = <$fh> ) {
        $line =~ s/\A\s+//; $line =~ s/\s+$//;
        $file{ $line } = 1;
    }
    for $i ( @input ) {
        if ( exists $file{ $i } ) { printf "%s\n", $i; };
    }
' "CCC\|AAA\|EEE\|DDD" infile

它产生:

CCC
AAA
EEE
DDD