dos或linux多行搜索和多行替换/添加

时间:2013-01-11 06:44:32

标签: linux batch-file sed awk

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

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

INPUT

$ 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 个答案:

答案 0 :(得分:1)

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

第一次看到模式时,有一种方法可以做到:

awk '1;/^\$$/ && !done{print "BLKABLA\n$"; done=1}' file

答案 1 :(得分:0)

因为这是Linux,你可能有GNU sed。尝试:

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

匹配三个正则表达式

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

然后追加

foo
$

答案 2 :(得分:0)

您还可以使用保留缓冲区并首先将整个文件读入其中,然后在整个文件中应用正则表达式。我已经在这里描述了解决方案 - multiline sed using backreferences

答案 3 :(得分:0)

这可能适合你(GNU sed):

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

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