在两个分隔符之间提取多行数据

时间:2016-03-08 20:52:01

标签: bash shell

我有一个包含多行数据的日志文件。我需要提取分隔符之间的所有行并将其保存到输出文件

input.log

Some data 
<delim_begin>ABC<delim_end>
some data
<delim_begin>DEF<delim_end>
some data

output.log文件应该看起来像

ABC

DEF

我尝试了这段代码,但它不起作用,它打印了input.log的所有内容

sed 's/<delim_begin>\(.*\)<delim_end>/\1/g' input.log > output.log

4 个答案:

答案 0 :(得分:4)

使用awk您可以使用自定义字段分隔符执行此操作:

awk -F '<(delim_begin|delim_end)>' 'NF>2{print $2}' file
ABC
DEF

使用grep -P(PCRE):

grep -oP '(?<=<delim_begin>).*(?=<delim_end>)' file
ABC
DEF

答案 1 :(得分:0)

sed替代

$ sed -nr 's/<delim_begin>(.*)<delim_end>/\1/p' file

ABC
DEF

答案 2 :(得分:0)

这应该这样做:

cat file | awk -F '<(delim_begin|delim_end)>' '{print $2}'

答案 3 :(得分:0)

您可以使用此命令 -

cat file | grep "<delim_begin>.*<delim_end>" | sed 's/<delim_begin>//g' | sed 's/<delim_end>//' > output.log