我有一个类似的日志文件
15-31-57.175 [4359] [TRACE] ThreadUpdateDb::insertUpdate() id[1791145] sqlquery[INSERT INTO DATAMART_QUEUE_DETAILS(EVENT_TIME,QUEUE,EVENT,TRACKNUM,QUEUE_TYPE,ASSOCIATED_ROUTING_SCRIPT,ANI,DNIS,CHANNEL_TYPE) VALUES ('2021.01.01 15:31:57','Electrolux', 'abandoned', '1609507904.86839', 'ROUTING_SCRIPT', 'Electrolux', '01008367900', '886123', 'CALL')]
15-31-59.104 [4361] [TRACE] ThreadUpdateDb::insertUpdate() id[1791170] sqlquery[INSERT INTO DATAMART_QUEUE_DETAILS(EVENT_TIME,QUEUE,EVENT,TRACKNUM,QUEUE_TYPE,ASSOCIATED_ROUTING_SCRIPT,ANI,DNIS,CHANNEL_TYPE) VALUES ('2021.01.01 15:31:59','Electrolux-Inst', 'queued', '1609507878.86832', 'VIRTUAL', 'Electrolux', '01552050703', '886123', 'CALL')]
我需要一个linux命令来删除"sqlquery"之前的所有单词,使其像一样
[INSERT INTO DATAMART_QUEUE_DETAILS(EVENT_TIME,QUEUE,EVENT,TRACKNUM,QUEUE_TYPE,ASSOCIATED_ROUTING_SCRIPT,ANI,DNIS,CHANNEL_TYPE) VALUES ('2021.01.01 15:31:57','Electrolux', 'abandoned', '1609507904.86839', 'ROUTING_SCRIPT', 'Electrolux', '01008367900', '886123', 'CALL')]
[INSERT INTO DATAMART_QUEUE_DETAILS(EVENT_TIME,QUEUE,EVENT,TRACKNUM,QUEUE_TYPE,ASSOCIATED_ROUTING_SCRIPT,ANI,DNIS,CHANNEL_TYPE) VALUES ('2021.01.01 15:31:59','Electrolux-Inst', 'queued', '1609507878.86832', 'VIRTUAL', 'Electrolux', '01552050703', '886123', 'CALL')]
使用这个Perl单行:
perl -pe 's{.*sqlquery}{}' in_file > out_file
Perl单行使用以下命令行标志:-e
:neneneba告诉Perl在线查找代码,而不是在文件中查找代码-p
:一次循环输入一行,默认情况下将其分配给$_
。在每次循环迭代后添加print $_
。
或者使用GNUgrep
:
grep -Po 'sqlqueryK.*' in_file > out_file
这里,grep
使用以下选项:-P
:使用Perl正则表达式-o
:只打印匹配项(每行1个匹配项(,不打印整行。
CCD_ 9:使正则表达式引擎";保持";它在CCD_ 10之前匹配的所有内容,并且不将其包括在匹配中。特别是,在打印匹配项时忽略正则表达式的前一部分。
另请参阅:perldoc perlrun
:如何执行Perl解释器:命令行开关grep
手册
perlre-Perl正则表达式