日志文件如下
流程开始-2016-04-02-00.36.13
将文件放入daADadD文件将移动到/sadafJJHFASJFFASJ/
提取文件:-/ASFDSHAF_ABC_2016-04-02.csv/ASFDSHAF_ABC.2016-04-02.csv/ASFDSHAF_ABC.2016-04-02.csv/ASFDSHAFABC.2016-04-2.csv/
流程结束-2016-04-02-00.36.36
流程开始-2016-04-02-10.01.20
将文件放入daADadD文件将移动到/sadafJJHFASJFFASJ/
提取文件:-/sdshsdhshcvb.2016-04-02.csv/sdshsdhsh_cv.2016-04-02.csv/sdshsdhs h_cv.2016 04-02.csv
流程结束-2016-04-02-10.01.21
模式/流程开始-2016-04-02//流程结束-2016-04-02有多个条目/如何在之间找到模式为/ABC_2016-04-02.csv/的条目或块
您可以使用sed(至少使用GNU sed 4,抱歉没有AIX sed可供测试):
# read complete block into hold space
/Process Beginning/,/Process Ending/ {
H
}
# "test" for csvfile in the block
/Process Ending/ {
# get hold space (i.e. complete block)
x
# if s did a "substition" (i.e. csvfile occured in the block): print
s/ASFDSHAF_ABC.2016-04-02.csv/&/p
# clear hold space for next block
s/.*//
h
}
假设您的日志文件是grplog.log
,脚本是grplog.sed
,然后运行如下脚本:sed -n -f grplog.sed grplog.log
。
解释:
- 脚本将处理块中的所有行读取到第一部分中的保留空间中
- 在
Process Ending
行触发的第二部分使用s
命令的p
标志:如果进行了替换,则打印新的图案空间。由于使用了&
,新旧图案空间是相同的