使用列表在文件中查找/替换的最简单方法?

使用列表在文件中查找/替换的最简单方法?

我有一个文件 foo.txt 和一个我想在该文件中找到的正则表达式。每次找到正则表达式时,我都想从另一个文件 bar.txt 中取出一行,并将其替换为我在 foo.txt 中找到的正则表达式匹配项。基本上我想做查找/替换,但每次替换时我希望下一个替换文本来自 bar.txt 中的下一行。

有什么简单的 shell 魔法可以做到这一点吗?

答案1

如果我理解正确的话,也许是这样的:

awk '{getline repl < "second-file"; sub(/regexp/, repl); print}' < first-file

或者,如果regexp每行可能出现多次或不在每行出现:

perl -pe 's/regexp/chomp($r=<STDIN>);$r/ge' first-file < second-file

答案2

perl -pe '
    BEGIN {
        open IN, "<replacements" or die $!;
    }

    s/pattern/
        $tmp = <IN>;
        chomp $tmp;
        $tmp
    /xe;
' filename

相关内容