Shokry Mohamed
Shokry Mohamed

Reputation: 7

How To delete specific symbols from a linux file?

My Linux file contains of over 4000 lines of code similar to this:

[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:

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.

Upvotes: 0

Views: 54

Answers (2)

LuxGiammi
LuxGiammi

Reputation: 691

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
  • ^: start of string
  • \[: The literal character [
  • \(.*\): A group that captures everything
  • \]: The literal character ]
  • $: end of string
  • \1: text in the first capturing group (\(.*\))

EDIT: in fact, this solution works even if there are '[' or ']' inside the input

Upvotes: 1

Thomas Stenhaug
Thomas Stenhaug

Reputation: 109

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.

Upvotes: 1

Related Questions