【发布时间】:2018-11-10 21:26:04
【问题描述】:
我有随机数据从源输入到文件中。我必须通读文件并仅提取介于特定模式之间的那部分数据。
示例:假设文件myfile.out 如下所示。
info-data
some more info-data
=================================================================
some-data
some-data
some-data
=================================================================
======================= CONFIG PARMS : ==========================
some-data
some-data
some-data
=================================================================
======================= REQUEST PARAMS : ========================
some-data
some-data
some-data
=================================================================
===================== REQUEST RESULTS ===========================
some-data
=================================================================
some-data
some-data
=================================================================
Data-I-Need
Data-I-Need
...
...
...
Data-I-Need
==========================F I N I S H============================
some-info-data
我正在寻找仅与此特定模式匹配的数据
=================================================================
Data-I-Need
Data-I-Need
...
...
...
Data-I-Need
==========================F I N I S H============================
我确实试着环顾了一下,比如
How to select lines between two marker patterns which may occur multiple times with awk/sed
Bash. How to get multiline text between tags
但是那里给出的awk、sed 解决方案似乎不起作用,这些命令没有给出任何错误或输出。
我试过了
PATTERN1="================================================================="
PATTERN2="==========================F I N I S H============================"
awk -v PAT1="$PATTERN1" -v PAT2="$PATTERN2" 'flag{ if (/PAT2/){printf "%s", buf; flag=0; buf=""} else buf = buf $0 ORS}; /PAT1/{flag=1}' myfile.out
和
PATTERN1="================================================================="
PATTERN2="==========================F I N I S H============================"
awk -v PAT1="$PATTERN1" -v PAT2="$PATTERN2" 'PAT1 {flag=1;next} PAT2 {flag=0} flag { print }' file
也许是因为模式?或者我做错了什么。
脚本将在 RHEL 6.5 上运行。
【问题讨论】:
-
你需要数据的开始和结束模式吗?
-
@oliv 不,我不需要那个。