我有一组配置文件,我们希望自动安装 这些文件包含描述模块的部分:
[section 1]
enable = no
...
...
[Section 2]
enable = no
...
...
所以从我的bash脚本开始,我想首先查找[section],然后找到该部分中第一个启用的orcurrance并将其更改为yes。
我一直在寻找sed这样做,但我无法弄清楚如何让它只改变第2节而不是第1节(配置文件可以包含20-30个部分,所有部分都包含一行,其中enable = no )
我尝试使用af grep首先搜索sektion标题,计算行号,然后使用sed搜索并替换linenumber greb返回。
这是非常复杂和艰苦的工作。
任何人都知道如何做到这一点?
答案 0 :(得分:-1)
只会替换部分中第一行enable =
的丑陋解决方案基于合理的方法。
确保每个部分都在他自己的行上。完成后,您可以更改该行的第一个enable=
您可以通过标记更改换行符将部分转换为一行(我将使用\r
)
您不需要一个长行,因此通过将[
更改为换行符,将每个新部分放在一个新行上。在sed
替换后,您可以恢复[
和换行符。
tr '\n[' '\r\n' < inputfile |
sed '/^Section 2\]/ s/enable = [^\r]*/enable = yes/' |
tr '\n\r' '[\n'
此解决方案有一个错误:tr
最后一行缺少\n
后,导致sed
在搜索部分时忽略该行。
我没有找到解决这个问题的好方法,所以我很乐意评论如何改进以下丑陋的修复:
(tr '\n[' '\r\n' < inputfile ; echo) |
sed '/^Section 2\]/ s/enable = [^\r]*/enable = yes/;$ s/$-1/\r/' |
tr '\n\r' '[\n' | sed '$ d'