Remove multiline text between brackets


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Remove multiline text between brackets
# 1  
Old 12-02-2013
Remove multiline text between brackets

I have some text in a file like so

Code:
This is {the 
first day 
of} my life.

What I would like as output is

Code:
This is
my life.

Any text between the curly braces is removed. In the forums I've found statements like

Code:
sed 's/<[^>]*>//g'

but the problem is that I think that works only line by line, i.e. in the above example, the text "first day" passes through and I don't want that.

Braces may occur many times in the file. Like here might be a full example.

Input:
Code:
 
This is {the 
first day 
of} my life
I swear {I 
was born right} 
in the doorway
I went out {in 
the rain} suddenly 
{everything} changed
They're 
{spreading 
blankets} on the beach

Output:
Code:
 
This is  
my life
I swear 
in the doorway
I went out 
suddenly 
changed
They're 
on the beach

Essentially, think of the text between curly brackets as comments and I only want to leave the code.

Removing blank lines and trimming whitespace nice but not necessary. It would be nice to write it as a shell command, e.g. sed, awk etc. I'm using Cygwin.
# 2  
Old 12-02-2013
One solution would be to slurp the file into a scalar and modify as below...
Code:
$ perl -e ' $text="This is {the
first day
of} my life
I swear {I
was born right}
in the doorway
I went out {in
the rain} suddenly
{everything} changed
Theyre
> {spreading
>  blankets} on the beach"; $text=~s/\{[^}]+\}//sg; print $text'
This is  my life
I swear
in the doorway
I went out  suddenly
 changed
Theyre
 on the beach

This User Gave Thanks to Skrynesaver For This Post:
# 3  
Old 12-02-2013
Code:
perl -0777pe'
  s/{[^}]*\n+.*?}\s+/\n/sg;
  s/{.*?}\s+//sg;
  s/\n+/\n/sg
  ' infile


Last edited by radoulov; 12-02-2013 at 08:33 AM.. Reason: Corrected.
This User Gave Thanks to radoulov For This Post:
# 4  
Old 12-02-2013
I don't read perl, but this solved my problem.

For reference, if I was testing for another character, e.g. between parenthesis or square brackets, are any of the above "{" or "}" special?

So for example,

Code:
perl -0777pe'
  s/\([^)]*\n+.*?)\s+/\n/sg;
  s/\(.*?)\s+//sg;
  s/\n+/\n/sg
  ' infile

doesn't work for parentheses, I don't think?
# 5  
Old 12-02-2013
Escape both open and close parenthesis and it will work:
Code:
perl -0777pe'
  s/\([^)]*\n+.*?\)\s+/\n/sg;
  s/\(.*?\)\s+//sg;
  s/\n+/\n/sg
  ' infile

You don't need to escape the curly braces in this context,
I corrected my previous post.

Last edited by radoulov; 12-02-2013 at 08:34 AM..
This User Gave Thanks to radoulov For This Post:
# 6  
Old 12-03-2013
Code:
 perl -ne 'BEGIN{$/=undef} {s/\{(.*?)\}//sg; print;}' filename

# 7  
Old 12-03-2013
Also try:
Code:
awk '{print $2} NR==1' RS={ FS="} " ORS= file

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to remove the text between all curly brackets from text file?

Hello experts, I have a text file with lot of curly brackets (both opening { & closing } ). I need to delete them alongwith the text between opening & closing brackets' pair. For ex: Input:- 59. Rh1 Qe4 {(Qf5-e4 Qd8-g8+ Kg6-f5 Qg8-h7+ Kf5-e5 Qh7-e7+ Ke5-f5 Qe7-d7+ Qe4-e6 Qd7-h7+ Qe6-g6... (6 Replies)
Discussion started by: prvnrk
6 Replies

2. Shell Programming and Scripting

Remove lines from multiline json

Hi , When extracting the data from API end point ,its giving multi line json .I want to remove certain lines with group": "tag" or tget and respect "item" values python test.py /data{" Id":" 7554317""group":"get", "item":"xx5e1"],"fields":} { "time": 1520460953, "... (4 Replies)
Discussion started by: akil
4 Replies

3. Shell Programming and Scripting

How to remove multiline HTML tags from a file?

I am trying to remove a multiline HTML tag and its contents from a few HTML files following the same basic pattern. So far using regex and sed have been unsuccessful. The HTML has a basic structure like this (with the normal HTML stuff around it): <div id="div1"> <div class="div2"> <other... (4 Replies)
Discussion started by: threesixtyfive
4 Replies

4. Shell Programming and Scripting

Remove everything inside of brackets

I need to use something bash related to remove everything inside of brackets. For example. In the following: abc<def>ghi<jkl>mno the result should be: abcghimno (4 Replies)
Discussion started by: locoroco
4 Replies

5. Shell Programming and Scripting

Remove whatever is mention in brackets

Hi all My previous question was complicated let me simplify it I have to just remove whatever is present in bracket () along with brackets ERCC1 (PA155) Platinum compounds (PA164713176) Allele A is not associated with response to Platinum compounds in women with Ovarian Neoplasms as... (2 Replies)
Discussion started by: Priyanka Chopra
2 Replies

6. Shell Programming and Scripting

Remove brackets repeats and separate in columns

Hi all, I want to remove the remove bracket sign ( ) and put in the separate column I also want to remove the repeated entry like in first row in below input (PA156) is repeated ESR1 (PA156) leflunomide (PA450192) (PA156) leflunomide (PA450192) CHST3 (PA26503) docetaxel... (4 Replies)
Discussion started by: manigrover
4 Replies

7. Shell Programming and Scripting

remove brackets and put it in a column and remove repeated entry

Hi all, I want to remove the remove bracket sign ( ) and put in the separate column I also want to remove the repeated entry like in first row in below input (PA156) is repeated ESR1 (PA156) leflunomide (PA450192) (PA156) leflunomide (PA450192) CHST3 (PA26503) docetaxel... (2 Replies)
Discussion started by: manigrover
2 Replies

8. Shell Programming and Scripting

Remove brackets { } in the data

Hello folks, I have a data file in which each line has 54 numbers, and every 3 numbers are bracketed. So totally 18 pairs of brackets in each line. A typical line is like: {29.187000274658203 -16.148000717163086 -0.9380000233650208} {30.63800048828125 -15.977999687194824... (5 Replies)
Discussion started by: rockytodd
5 Replies

9. Shell Programming and Scripting

Remove text between brackets

How can I use bash to remove all text between "<" and ">" in a file? (1 Reply)
Discussion started by: locoroco
1 Replies

10. Shell Programming and Scripting

Delete text between square brackets and also delete those square brackets using sed or awk

Hi All, I have a text file which looks like this: computer programming systems engineering I want to get rid of these square brackets and also the text that is inside these brackets. So that my final text file looks like this: computer programming systems engineering I am using... (3 Replies)
Discussion started by: shoaibjameel123
3 Replies
Login or Register to Ask a Question