Python 在文件末尾第二次出现的模式上方插入一行

Python 在文件末尾第二次出现的模式上方插入一行

我有一个 RHEL kickstart 文件,如下所示,其中包含多个%发布...%结束其中的各个部分之间有许多行 Python 代码。

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

我正在尝试在搜索模式第二次出现之前(上方)插入包含一些数据的新行“%结尾“从最后(EOF)开始。任何提示/输入都非常感激。

答案1

spam在倒数第二个块的最后一个位置插入文本的 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

相关内容