0

我想使用 sed/awk 编辑文件。该文件由几个配置部分组成,如下所示:

SECTION 1 BEGIN
some stuff
SECTION END

SECTION 2 BEGIN
some stuff
some more stuff
important line
SECTION END

如果它不存在,我想添加important line到末尾SECTION 2,最好是作为一个命令。我一直在看这个问题中的 fgrep/sed 组合,但我不太明白如何根据我的需要调整它。

注意:部分中可能有空行。

非常感谢。

4

2 回答 2

5

使用awk

awk '
  $0 == "SECTION 2 BEGIN" { inSec2 = 1 } 
  inSec2 && $0 == "important line" { hasImportant = 1 } 
  inSec2 && $0 == "SECTION END" { 
    if (!hasImportant) { print "important line" } 
    inSec2 = 0
  }
  1'
于 2013-04-19T10:25:22.847 回答
3

基于迈克尔的解决方案,有一个单行:

awk -vline="important line" '/^SECTION 2 BEGIN$/{f=1}f&&$0==line{f=0}f&&/^SECTION END$/{print line;f=0}1'<<EOT
SECTION 1 BEGIN
some stuff
SECTION END

SECTION 2 BEGIN
some stuff
some more stuff
SECTION END

SECTION 2 BEGIN
some stuff
some more stuff
important line
SECTION END

SECTION 3 BEGIN
oops
SECTION END
EOT

输出:

SECTION 1 BEGIN
some stuff
SECTION END

SECTION 2 BEGIN
some stuff
some more stuff
important line
SECTION END

SECTION 2 BEGIN
some stuff
some more stuff
important line
SECTION END

SECTION 3 BEGIN
oops
SECTION END
于 2013-04-19T13:42:50.380 回答