我正在尝试在文件中找到多行模式,然后在其后添加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 $
$---------------------------$
由于
答案 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