【发布时间】:2023-02-02 08:45:53
【问题描述】:
我在以下表格的各部分之间打印
## FAML [ASMB] keyword,keyword
## Some text
## END OF FAML [ASMB]
我遇到了未达到“## END OF FAML [ASMB]”时出现的问题。我想在遇到不以注释字符“##”开头的行时立即停止。
例如,我想在到达“某些代码”时停止,即使它没有找到“## END OF FAML [ASMB]”,因为该行不是以“##”开头。
## FAML [ASMB] keyword,keyword
## Some text
## End OF FAL
Some code
这是实现
spc='[[:space:]]*'
gph="[[:graph:]]+"
cmt='\/\/'
ebl='\['
ebr='\]'
local pn_ere="^[[:space:]]*([#;!]+|@c|${cmt})[[:space:]]+"
local kys="(([^,]+)(,[^,]+)*)?"
nfaml=${faml:-"[[:graph:]]+"}
nasmb=${asmb:-"[[:graph:]]+"}
beg_ere="${pn_ere}${nfaml} ${ebl}${nasmb}${ebr}${spc}${kys}$"
end_ere="${pn_ere}END OF ${nfaml} ${ebl}${nasmb}${ebr}${spc}$"
sed -E -n "/$beg_ere/,/$end_ere/ {
/$end_ere/z; s/$pn_ere// ; p
}" "$filename"
【问题讨论】:
-
在您提供的每个样本中,输入实际上是否包含 3 个空行?
-
是的,随着 cmets 的发展,空行是允许的。空白行被认为是有效的,当一个到达非注释行时,应该停止打印。直到当然还有另一个匹配
beg_ere。 -
没有遇到
beg_ere的问题。
标签: sed