匹配两个文件中的公共行,并在regex中编辑第二个文件

匹配两个文件中的公共行,并在regex中编辑第二个文件,regex,Regex,我被困在最后一步,希望有人能帮助我 我有两个文件: 文件1= 青苹果 文件2= 青苹果/数量/100 红桃/数量/200 我的代码: grep-f file1 file2 | sed's/quantity.*/totalXYZ/' =绿苹果/totalXYZ 我想将其应用于file2,因此结果如下所示: 文件2= 青苹果/totalXYZ 红桃/数量/200 谢谢您可以通过以下方式使用AWK获得: awk -f grepandreplace.awk file2 file1 grepandrep

我被困在最后一步,希望有人能帮助我

我有两个文件:

文件1=

青苹果

文件2=

青苹果/数量/100

红桃/数量/200

我的代码:

grep-f file1 file2 | sed's/quantity.*/totalXYZ/'

=绿苹果/totalXYZ

我想将其应用于file2,因此结果如下所示:

文件2=

青苹果/totalXYZ

红桃/数量/200


谢谢

您可以通过以下方式使用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;
    }
}

有问题吗?请给我留言。

使用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;
    }
}

有问题吗?请给我留言。

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

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

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

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

非常感谢。太棒了!我还找到了另一种方法,一行一行,看看我的下一个答案。谢谢你谢谢你!!太棒了!我还找到了另一种方法,一行一行,看看我的下一个答案。再次感谢你,谢谢你。是的,这也奏效了!但如何使其写入文件2?我的想法是:sed-I…实际上,使用您的代码,我会将其重定向到file3,然后是mvfile3 file2。再次感谢rmunoz的帮助。您不需要文件3,您可以将输出重定向到文件2。不客气,-再次感谢你。是的,这也奏效了!但如何使其写入文件2?我的想法是:sed-I…实际上,使用您的代码,我会将其重定向到file3,然后是mvfile3 file2。再次感谢rmunoz的帮助。您不需要文件3,您可以将输出重定向到文件2。不客气,-