Example:
This is {
the multiline
text file }
that wants
{ to be
changed
} anyway.
Should become:
This is
that wants
anyway.
I have found some similar threads in the forum, but they don't seem to work with multi-line curly brackets.
If possible, I would prefer some one-line method, like solutions based on grep, sed, awk… etc.
EDIT: Solutions seem to be OK, but I have noticed that my original files include curly brackets nesting. So I am opening a new question. Thanks you everybody: How can I delete all text between nested curly brackets in a multiline text file?
Best Answer
Explanation:
:again;$!N;$!b again;
This reads the whole file into the pattern space.
:again
is a label.N
reads in the next line.$!b again
branches back to theagain
label on the condition that this is not the last line.s/{[^}]*}//g
This removes all expressions in braces.
On Mac OSX, try:
Nested Braces
Let's take this as a test file with lots of nested braces:
Here is a modification to handle nested braces:
Explanation:
:again;$!N;$!b again
This is the same as before: it reads in the whole file.
:b
This defines a label
b
.s/{[^{}]*}//g
This removes text in braces as long as the text contains no inner braces.
t b
If the above substitute command resulted in a change, jump back to label
b
. In this way, the substitute command is repeated until all brace-groups are removed.