【发布时间】:2021-07-23 19:13:19
【问题描述】:
我正在尝试找到一种使用 sed 将字符串“.sh”插入到文本文件中特定行的方法。我遇到的问题是,如果以前的正则表达式匹配,我只想插入字符串,它还必须支持“名称”和“扩展”标签之间的可变行数并且是幂等的,所以我可以多次运行它只为“extension”标记的空格分隔列表插入一次“.sh”。
这是文本文件的小sn-p:-
<name>gba</name>
<fullname>Game Boy Advance</fullname>
<manufacturer>Nintendo</manufacturer>
<release>2001</release>
<hardware>portable</hardware>
<path>/storage/roms/gba</path>
<extension>.gba .GBA .zip .ZIP .7z .7Z</extension>
所以我想将 <extension>.gba .GBA .zip .ZIP .7z .7Z</extension> 更改为 <extension>.gba .GBA .zip .ZIP .7z .7Z .sh</extension> 仅当名称标签为 <name>gba</name> 时
这是迄今为止我想出的最好的,但它有两个问题,首先,代码的后续执行重复插入,其次它的行数固定(6),可能并非总是如此:-
sed -i '/<name>gba<\/name>/{n;n;n;n;n;n;s/<\/extension>/ .sh<\/extension>/}' /tmp/test.txt
【问题讨论】: