我有一个包含多行数据的日志文件。我需要提取分隔符之间的所有行并将其保存到输出文件
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
答案 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