![Python 在文件末尾第二次出现的模式上方插入一行](https://linux22.com/image/133096/Python%20%E5%9C%A8%E6%96%87%E4%BB%B6%E6%9C%AB%E5%B0%BE%E7%AC%AC%E4%BA%8C%E6%AC%A1%E5%87%BA%E7%8E%B0%E7%9A%84%E6%A8%A1%E5%BC%8F%E4%B8%8A%E6%96%B9%E6%8F%92%E5%85%A5%E4%B8%80%E8%A1%8C.png)
我有一个 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