Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dos或linux多行搜索和多行替换/添加_Linux_Batch File_Sed_Awk - Fatal编程技术网

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