Bash 将节复制到新文件中

Bash 将节复制到新文件中,bash,sed,awk,Bash,Sed,Awk,我有一个文本文件, !--- Marker one --! aaaa bbbb cccc dddd !--- Marker two --! eeee ffff !--- Marker three --! gggg hhhh iiii 我需要使用Bash将标记2(直到标记2的末尾)复制到一个新文件中 !--- Marker two --! eeee ffff 成为一个单独的文件 awk $ awk '/Marker two/{f=1;print;next}f&&/Marker

我有一个文本文件,

!--- Marker one --!
aaaa
bbbb
cccc
dddd
!--- Marker two --!
eeee
ffff
!--- Marker three --!
gggg
hhhh
iiii

我需要使用Bash将标记2(直到标记2的末尾)复制到一个新文件中

!--- Marker two --!
eeee
ffff
成为一个单独的文件

awk

$ awk '/Marker two/{f=1;print;next}f&&/Marker/{exit}f' file
!--- Marker two --!
eeee
ffff
猛击


使用“sed”可以做什么的经典案例:

sed -n '/^!--- Marker two --!/,/^!--- Marker three --!/{
        /^!--- Marker three --!/d;p;}' \
    infile > outfile
唯一的问题是第一个标记在数据中出现多次。模式匹配节的开始和下一节的开始;大括号内的命令删除第二节开头的行,并打印所有其他行

您还可以使用“w”命令处理多个这样的模式以分离文件(稍有不同的匹配方案-但如果需要,可以对其进行调整):

等等

$ sed  -n '/Marker two/,/Marker three/{/Marker three/!p}' file
!--- Marker two --!
eeee
ffff
sed -n '/^!--- Marker two --!/,/^!--- Marker three --!/{
        /^!--- Marker three --!/d;p;}' \
    infile > outfile
sed -n -e '/!--- Marker one --!/,/!--- Marker two --!/w file1' \
       -e '/!--- Marker three --!/,/!--- Marker four --!/w file2' infile