sed / awk / grep删除文本文件中匹配模式以外的所有内容

时间:2011-01-07 08:22:50

标签: sed awk command terminal grep

我有一个文件let pattern.txt

包含

模式1

pattern2

pattern3

pattern4

另一个文本文件let(complex.txt)

包含

路径:XXXXXXXXXXXXXXXXXXXXXXXXXX(XXXXXXXXX,'pattern1 / 2/3/4')XXXXXXXXXXXX

路径:XXXXXXXXXXXXXXXXXXXXXXXXXX(XXXXXXXXX,'pattern1 / 2/3/4')XXXXXXXXXXXX

路径:XXXXXXXXXXXXXXXXXXXXXXXXXX(XXXXXXXXX,'pattern1 / 2/3/4')XXXXXXXXXX

现在问题是:::我必须通过匹配pattern.txt到complex.txt来获得另一个文件filter.txt,它将包含一行

路径:模式1/2/3/4 .....

我试过......但我没有得到......

有人可以帮忙......谢谢你...

1 个答案:

答案 0 :(得分:2)

pattern.txt包含哪种类型的正则表达式(Basic,extended,perl?)?

如果扩展,只需使用awk:

awk '
    FNR==NR{
        patterns[$0]++; 
        next;
    } 
    {
        for (el in patterns) 
            if (match($0,el)) {
                print $1 substr($0,RSTART,RLENGTH); 
                next;
            } 
    }' pattern.txt complex.txt >filter.txt

上面的代码依赖于“path:”和complex.txt中其余行之间的空格。