简体   繁体   English

如何从 linux 文件中删除特定符号?

[英]How To delete specific symbols from a linux file?

My Linux file contains of over 4000 lines of code similar to this:我的 Linux 文件包含 4000 多行与此类似的代码:

[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')]
[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', 'distributed', '1609507878.86832', 'ROUTING_SCRIPT', 'Electrolux', '01552050703', '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', 'distributed', '1609507878.86832', 'VIRTUAL', 'Electrolux', '01552050703', '886123', 'CALL')]

I need linux command(s) to delete the square brackets [ ] from the file so that it looks something like this:我需要 linux 命令从文件中删除方括号 [ ],使其看起来像这样:

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')
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', 'distributed', '1609507878.86832', 'ROUTING_SCRIPT', 'Electrolux', '01552050703', '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', 'distributed', '1609507878.86832', 'VIRTUAL', 'Electrolux', '01552050703', '886123', 'CALL')

Finally, I want to insert these lines directly to MySQL query.最后,我想将这些行直接插入到 MySQL 查询中。

A cheap and cheerful way is一种廉价而愉快的方式是

tr -d '[]' < infile > outfile

Edit: I should add that this won't have the desired result if [ or ] occurs in the data.编辑:我应该补充一点,如果 [ 或 ] 出现在数据中,这将不会产生预期的结果。

Even though this question already has an answer, I'd like to share my own solution here:即使这个问题已经有了答案,我还是想在这里分享我自己的解决方案:

cat infile | sed 's/^\[\(.*\)\]$/\1/' > outfile

Explanation:解释:

  • s : substitute command s/regexp/replacement/flags s : 替换命令s/regexp/replacement/flags
  • ^ : start of string ^ : 字符串的开头
  • \[ : The literal character [ \[ :文字字符[
  • \(.*\) : A group that captures everything \(.*\) :捕获所有内容的组
  • \] : The literal character ] \] : 文字字符]
  • $ : end of string $ : 字符串结尾
  • \1 : text in the first capturing group ( \(.*\) ) \1 :第一个捕获组中的文本( \(.*\)

EDIT: in fact, this solution works even if there are '[' or ']' inside the input编辑:事实上,即使输入中有 '[' 或 ']' 这个解决方案也有效

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM