匹配2个文件中的公共行并编辑正则表达式中的第二个文件

时间:2012-09-26 13:49:04

标签: regex

我被困在最后一步,希望有人可以帮助我。

我有2个文件:

file1 =

  

Green Apple

file2 =

  

绿苹果/数量/ 100

     

红桃/数量/ 200

我的代码:

  

grep -f file1 file2 | sed's / quantity(。*)/ totalXYZ /'

     

= Green Apple / totalXYZ

我想将它应用于file2,所以结果如下:

file2 =

  

Green Apple / totalXYZ

     

红桃/数量/ 200

由于

2 个答案:

答案 0 :(得分:0)

您可以通过这种方式使用AWK获取它:

awk -f grepandreplace.awk file2 file1

“grepandreplace.awk”的代码是:

#!/usr/bin/awk -f
BEGIN {
    FS = "/";
    f_grep = ARGV[2];
    ARGC = 2;

    while ((getline < f_grep) > 0) {
        grep[$1] = "";
    }
}

{
    if ($1 in grep) {
        print $1"/totalXYZ";
    } else {
        print $0;
    }
}

我得到了你想要的输出:

Green Apple/totalXYZ
Red Peach/quantity/200

有任何问题吗?给我留言。

答案 1 :(得分:0)

您可以使用2个greps在一行中获取它:第一个用于匹配,第二个用于反向匹配(-v)。 然后将第二个输出附加到第一个输出:

echo -e `grep -f file1 file2 | sed 's/quantity.*/totalXYZ/'`"\n"`grep -vf file1 file2`