dos或linux多行搜索和多行替换/添加
我试图在一个文件中找到一个多行模式,并在其后面添加两行或替换它 这就是输入和输出的样子 输入dos或linux多行搜索和多行替换/添加,linux,batch-file,sed,awk,Linux,Batch File,Sed,Awk,我试图在一个文件中找到一个多行模式,并在其后面添加两行或替换它 这就是输入和输出的样子 输入 $ 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 $
$---------------------------$
$
$---------------------------$
$ EXECUTIVE CONTROL SECTION $
$---------------------------$
$ DATE: Fri Apr 20 16:36:56 2012
$---------------------------$
$ FILE MANAGEMENT SECTION $
$---------------------------$
$
BLKABLA
$
$---------------------------$
$ EXECUTIVE CONTROL SECTION $
$---------------------------$
输出
$ 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 $
$---------------------------$
谢谢因为这是Linux,您可能已经使用了GNU。尝试:
sed -e '/^\$ FILE MANAGEMENT SECTION \$$/,+2{/^\$-\+\$/,+1{/^\$$/afoo\
$
}
}' input
它在三个regexp上匹配
^\$ FILE MANAGEMENT SECTION \$$
^\$-\+\$$
^\$$
然后附加
foo
$
您还可以使用保持缓冲区,首先将整个文件读入其中,然后在整个文件中应用正则表达式。我在这里已经描述了解决方案-这可能适合您(GNU-sed): 或 第一次看到图案时,可以使用一种方法:
awk '1;/^\$$/ && !done{print "BLKABLA\n$"; done=1}' file
谢谢,效果很好,但我不止一次。如何将其限制为第一个答案?如果这是您正在寻找的答案,请单击旁边的复选标记来指明。
awk '1;/^\$$/ && !done{print "BLKABLA\n$"; done=1}' file