-1

我正在尝试在文件中查找多行模式,然后在其后添加 2 行或替换它。

这就是输入和输出的样子。

输入

$ DATE: Fri Apr 20 16:36:56 2012
$---------------------------$
$ FILE MANAGEMENT SECTION   $
$---------------------------$
$
$---------------------------$
$ EXECUTIVE CONTROL SECTION $
$---------------------------$

输出

$ DATE: Fri Apr 20 16:36:56 2012
$---------------------------$
$ FILE MANAGEMENT SECTION   $
$---------------------------$
$
BLKABLA
$
$---------------------------$
$ EXECUTIVE CONTROL SECTION $
$---------------------------$

谢谢

4

4 回答 4

1
awk '1;/^\$$/{print "BLKABLA\n$"}' file

一种方法是在第一次看到模式时做到这一点:

awk '1;/^\$$/ && !done{print "BLKABLA\n$"; done=1}' file
于 2013-01-11T13:28:47.190 回答
0

You can also use the holding buffer and read the whole file into it first and then apply the regular expression across the whole file. I described the solution already here - multiline sed using backreferences

于 2013-01-11T09:26:01.480 回答
0

由于这是 Linux,您可能拥有 GNU sed。尝试:

sed -e '/^\$ FILE MANAGEMENT SECTION   \$$/,+2{/^\$-\+\$/,+1{/^\$$/afoo\
$
}
}' input

它匹配三个正则表达式

^\$ FILE MANAGEMENT SECTION   \$$
^\$-\+\$$
^\$$

然后追加

foo
$
于 2013-01-11T06:51:47.503 回答
0

这可能对您有用(GNU sed):

sed '/^$ FILE MANAGEMENT SECTION   $$/!b;n;/^$--*$$/a$\nBLKABLA' file

或者

sed '/^$ FILE MANAGEMENT SECTION   $$/!b;n;$!N;/^$--*$\n$$/aBLKABLA\n$' file
于 2013-01-11T11:32:25.080 回答