使用 awk 替换文件中的文本块

Using awk to replace block of text in a file

我正在尝试使用 awk 替换 html 文件中的选定行 (0,51),但是我只是想出了如何从原始文件中复制这些行,或者将它们附加到另一个文件或替换整个文件,包括 51 以下的行。

到目前为止我有

awk 'NR>=0 && NR<=51' index.html > MATLAB.html

尽管如此,这会替换 MATLAB.html 中第 51 行以下的行。无论如何我可以保留原始文件并只替换第 0-51 行吗?

我想你想做的是:

tmp=$(mktemp) && 
{ head -n 51 index.html; tail -n +52 MATLAB.html; } > "$tmp" &&
mv -- "$tmp" MATLAB.html

如果您愿意,可以使用 awk 而不是 head+tail 来做到这一点:

tmp=$(mktemp) && 
awk -v lim=51 '
    NR==FNR {
        if ( FNR <= lim ) {
            print
        }
        next
    }
    FNR > lim
' index.html MATLAB.html > "$tmp" &&
mv -- "$tmp" MATLAB.html