Pythonはファイルの終わりに2番目のパターンの発生の上に行を挿入します。

Pythonはファイルの終わりに2番目のパターンの発生の上に行を挿入します。

以下に示すように、複数のRHEL kickstartファイルが含まれています。%リリース...%終了さまざまなセクションの間には多くのPythonコード行があります。

%post
.....
.....
%end
%post
.....
.....
%end
%post
.....
.....
%end

2番目の検索パターンが表示される前に、一部のデータを含む新しい行を挿入しようとします(上記)。%終了「終わりから始めます(EOF)。すべてのヒント/入力に感謝します。

答え1

spam2番目のブロックの最後の位置にテキストを挿入するPythonコードスニペット%post..%end

with open('input') as fp:
    lines = fp.readlines()

locs = [i for i, val in enumerate(lines) if val == '%end\n']
lines.insert(locs[-2], 'spam' + '\n')

with open('input', 'w') as fp:
    fp.write(''.join(lines))

答え2

入れる「一部データ」最後のパターンラインの前に。
grep+awk解決策:

awk -v n="$(($(grep -c '^%end' inputfile) - 1))" \
'/^%end/{ if (++cnt == n) print "some data" }1' inputfile

出力:

%post
.....
.....
%end
%post
.....
.....
some data
%end
%post
.....
.....
%end

関連情報