【发布时间】:2015-10-22 19:51:48
【问题描述】:
我有一个包含数千行的文本文件,如下所示
`DEFINE OBJECT('OBJECT.TOPIC') +
* ALTDATE(2015-09-22) +
* ALTTIME(00.56.38) +
DESCR('topic object') +
GET(ENABLED) +
PUT(ENABLED) +
PROPCTL(COMPAT) +
TARGTYPE(TOPIC) +
REPLACE
DEFINE OBJECT('OBJECT1') +
* CRDATE(2015-09-22) +
* CRTIME(00.56.38) +
* CURDEPTH(0) +
CUSTOM(' ') +
DESCR('TEST') +
DISTL(NO) +
PROCESS(' ') +
SHARE +
USAGE(NORMAL) +
REPLACE
DEFINE OBJECT('OBJECT2') +
* ALTDATE(2015-09-22) +
* ALTTIME(00.56.38) +
* CURDEPTH(0) +
CUSTOM(' ') +
DESCR('TEST') +
DISTL(NO) +
PROCESS(' ') +
SHARE +
USAGE(NORMAL) +
REPLACE
DEFINE OBJECT('TCOBJECT1') +
* CRDATE(2015-09-22) +
* CRTIME(00.56.38) +
* CURDEPTH(0) +
CUSTOM(' ') +
DESCR('TEST') +
DISTL(NO) +
PROCESS(' ') +
SHARE +
USAGE(NORMAL) +
REPLACE
SET RECORD +
PROFILE('OBJECT2') +
GROUP('user1') +
AUTHADD(change,delete,display,alter)
SET RECORD +
PROFILE('TCOBJECT1') +
GROUP('user3') +
AUTHADD(change,delete,display,alter)
SET RECORD +
PROFILE('OBJECT1') +
GROUP('user1') +
AUTHADD(change,delete,display,alter)
SET RECORD +
PROFILE('OBJECT1') +
GROUP('user2') +
AUTHADD(change,delete,display,alter)
SET RECORD +
PROFILE('OBJECT1') +
GROUP('user3') +
AUTHADD(change,delete,display,alter)`
现在,我想获取包含匹配模式 OBJECT1 的块。
`DEFINE OBJECT('OBJECT1') +
* CRDATE(2015-09-22) +
* CRTIME(00.56.38) +
* CURDEPTH(0) +
CUSTOM(' ') +
DESCR('TEST') +
DISTL(NO) +
PROCESS(' ') +
SHARE +
USAGE(NORMAL) +
REPLACE
SET RECORD +
PROFILE('OBJECT1') +
GROUP('user1') +
AUTHADD(change,delete,display,alter)
SET RECORD +
PROFILE('OBJECT1') +
GROUP('user2') +
AUTHADD(change,delete,display,alter)
SET RECORD +
PROFILE('OBJECT1') +
GROUP('user3') +
AUTHADD(change,delete,display,alter)`
我已经尝试过使用 awk 和 sed 来获得至少第一部分。但它并没有在 pattern2 的第一场比赛之后停止。我运行这些命令只是为了至少获得第一个块..
awk '/OBJECT1/ {p=1}; p; $0=="REPLACE" {p=0}' objlist.txt > obj1list.txt
awk '$0=="OBJECT1" {p=1}; p; $0=="REPLACE" {p=0}' objlist.txt > obj1list.txt
cat objlist.txt | sed -n '/OBJECT1/p;/REPLACE/q' > obj1list.txt
但这些不起作用。请帮助
根据建议的答案,我正在使用 awk -vRS="[^+]\n" 'BEGIN{printf "`"}/\/{printf $0 RT}' 并获得所需的输出。但是现在我想从使用上述命令获得的输出中删除包含 user2 和 user3 的块。
【问题讨论】:
-
嗨..我知道这是旧的,但是有没有办法在这个问题中获得包含 OBJECT1 的块后删除包含 user3 的块。我正在尝试 awk -vRS="[^+]\n" 'BEGIN{printf ""}/\/{printf " " $0 RT}'|sed '/^\s*$/ d' 但这不起作用