我想从部件EDUNAME获取数据库字符串:db2agent( PRD )
我的第一次尝试不起作用; - )
sed 's/.*EDUNAME: .* (//' | sed 's/).*FUNCTION.*//
输出:
2016-02-16-15.29.08.030467+060 I11738607E972 LEVEL: Error PID
: 28641 TID : 46912874997504 PROC : db2sysc 0
INSTANCE: db2inst NODE : 000 DB : PRD
APPHDL : 0-25656 APPID: *LOCAL.db2t08.160216144150
AUTHID : DB2ISNT HOSTNAME: UNIX1
EDUID : 44342 EDUNAME: db2agent (PRD) 0
FUNCTION: DB2 UDB, relation data serv,
sqlrr_rds_common_post, probe:1700 MESSAGE : Severe TERMINATE err at
nest lvl 1, in SQL from rtn
SYSPROC.SYSINSTALLOBJECTS: DATA #1 : SQLCA, PD_DB2_TYPE_SQLCA, 136 bytes sqlcaid : SQLCA sqlcabc: 136
sqlcode: -1224 sqlerrml: 0 sqlerrmc: sqlerrp : SQLRRRCP sqlerrd :
(1) 0x80040003 (2) 0x00000003 (3) 0x00000000
(4) 0x00000000 (5) 0xFFFFFE0C (6) 0x00000000 sqlwarn : (1) (2) (3) (4) (5) (6)
(7) (8) (9) (10) (11) sqlstate: 55032
有人能帮助我吗?
答案 0 :(得分:1)
如果你有 GNU grep
,你可以执行以下操作:
$ grep -Po ' EDUNAME: db2agent \(\K[^)]+' file
PRD
-P
活动支持PCRE(Perl兼容的正则表达式)-o
仅输出正则表达式匹配的内容。\K
会丢弃到目前为止匹配的所有内容。[^)]+
然后在结束)
之前捕获所有内容。答案 1 :(得分:0)
$ cat in
2011-01-10-12.10.13.923352-300 I74680A573 LEVEL: Warning
PID : 1234 TID : 100 PROC : db2sysc
INSTANCE: db2inst1 NODE : 000 DB : SAMPLE
APPHDL : 0-33648 APPID: 192.168.1.1.50234.11022217100
AUTHID : DB2INST1
EDUID : 608 EDUNAME: db2agent (SAMPLE) 0
FUNCTION: DB2 UDB, routine_infrastructure, sqlerMasterThreadReq,
probe:89
MESSAGE : FMP reported it could not create a new thread
DATA #1 : Hexdump, 4 bytes
0x000000020210F180 : 0000 0C05 ....
$ sed -n '/.* EDUNAME: \([^ ]*\).*/s//\1/p' in
db2agent
-n
切换到sed
表示跳过自动打印。正则表达式在EDUNAME:
之后捕获非空格序列。如果正则表达式匹配,则s//\1/p
重用先前的正则表达式,将匹配替换为第一次捕获并打印结果。
或许你想要下一个词:
$ sed -n '/.* EDUNAME: [^ ]* (\([^ ]*\)).*/s//\1/p' in
SAMPLE