从mysql日志的行中删除特定的单词



我有一个类似的日志文件

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正则表达式

最新更新