使用bash,根据模式匹配创建文件

问题描述 投票:0回答:1

我们有一个内容如下的文件。

/* ----------------- pattern_1 ----------------- */ 

jb: pattern_1  
Data:
asdflj 
adfas
Log: dir/log1

/* ----------------- pattern_2 ----------------- */ 

jb: pattern_2   typ: CM
comm: ${dir}/DISPV
mach: au_buh
description: "run flag"


/* ----------------- pattern_3 ----------------- */ 

jb: pattern_3   typ: fw 
own: buh
out_file: "${log}/jl.log"
err: "log.err"

该文件必须分为 3 个并创建为 3 个单独的文件,如下所示:

pattern_1.txt

/* ----------------- pattern_1 ----------------- */ 

jb: pattern_1  
Data:
asdflj 
adfas
Log: dir/log1

pattern_2.txt

* ----------------- pattern_2 ----------------- */ 

jb: pattern_2   typ: CM
comm: ${dir}/DISPV
mach: au_buh
description: "run flag"

pattern_3.txt

/* ----------------- pattern_3 ----------------- */ 

jb: pattern_3   typ: fw 
own: buh
out_file: "${log}/jl.log"
err: "log.err"

尝试过“awk模式匹配”,但没有成功。有什么帮助吗??

bash awk sed
1个回答
0
投票

将这些模式注释保留在

file
:

awk '/\/\* -{17} [a-z0-9_]+ -{17} \*\// {if (x) close(x); split($0,a," "); if (a[3] != "") {x=a[3]".txt"} else {next}} {if (x) print > x}' file

这是一个近似值,您需要始终拥有符号 - 17 次,就像您的主文件一样,awk 将搜索该字符串以了解何时开始和剪切内容。因此,它将为主文件的每个模式部分提供一个 txt 文件。

© www.soinside.com 2019 - 2024. All rights reserved.