使用 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
我正在尝试使用 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