Delete a block of text delimited by blank lines when pattern is found


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Delete a block of text delimited by blank lines when pattern is found
# 1  
Old 12-15-2007
Delete a block of text delimited by blank lines when pattern is found

I have a file which contains blocks of text - each block is a multi-lines text delimited by blank lines eg.

Code:
<blank line>
several lines of text
...
pattern found on this line
several more lines of text
...
<blank line>

How do you delete the block of text (including the blank lines) when the pattern is found and leave one blank line?
# 2  
Old 12-15-2007
Something like this?

Code:
sed -n '
/^$/ b block
H
$ b block
b
:block
x
/pattern/!p' data

# 3  
Old 12-15-2007
Or:

Code:
sed '/pattern/,/^$/d' file

Regards
# 4  
Old 12-15-2007
Quote:
Originally Posted by Franklin52
Or:

Code:
sed '/pattern/,/^$/d' file

I think the OP wants something different:

Code:
$ cat data
block1
block1
block1
pattern block1
block1

block2
block2
block2
block2

block3
block3
pattern block3
block3

$ sed '/pattern/,/^$/d' data
block1
block1
block1
block2
block2
block2
block2

block3
block3

$ sed -n '
/^$/ b block
H
$ b block
b
:block
x
/pattern/!p' data

block2
block2
block2
block2

# 5  
Old 12-15-2007
Perhaps I misinterpreted the question, the OP could make it clear.

Regards
# 6  
Old 12-15-2007
Quote:
Originally Posted by radoulov
I think the OP wants something different:

...

$ sed -n '
/^$/ b block
H
$ b block
b
:block
x
/pattern/!p' data

block2
block2
block2
block2
[/code]
Yes. Thank you, Radoulov. You interpreted my question correctly. (Sorry, Franklin52 that it was none too clear).

I don't quite understand the above bit of code about the Set-Aside buffer (but I'll look it up later ...unless you or someone wants to explain for the benefit of others).

But, in any case, the final result with only lines of block2 is what I want. I will do a test run later ... before I use it in earnest on that 8 gig file at work. Thanks again.
# 7  
Old 12-15-2007
Code:
# more file
block1
block1
block1
pattern block1
block1

block2
block2
block2
block2

block3
block3
pattern block3
block3

# awk 'BEGIN{RS=""}/pattern/{next}1' file
block2
block2
block2
block2

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Delete multiple lines between blank lines containing two patterns

Hi all, I'm looking for a way (sed or awk) to delete multiple lines between blank lines containing two patterns ex: user: alpha parameter_1 = 15 parameter_2 = 1 parameter_3 = 0 user: alpha parameter_1 = 15 parameter_2 = 1 parameter_3 = 0 user: alpha parameter_1 = 16... (3 Replies)
Discussion started by: ce9888
3 Replies

2. Shell Programming and Scripting

Tried many options but unable to delete blank lines from text file

Hi, I tried the following options but was unable to delete blank lines from file Input file = temp.hash.txt temp.hash.txt content 90 0 89.56 0 0 57575.4544 56.89 (9 Replies)
Discussion started by: uuuunnnn
9 Replies

3. UNIX for Dummies Questions & Answers

How to delete blank line/s before and after a search pattern?

Hi, Test file x.txt below. This file is generated by a program that I unfortunately do not have control on how it gets presented/generated. create PACKAGE "XXX_INTERFACE_DEFECT_RPT_TEST" is TYPE refCursor IS REF CURSOR; Function queryRecords ( p_status varchar2, ... ... ... )... (4 Replies)
Discussion started by: newbie_01
4 Replies

4. UNIX for Advanced & Expert Users

Delete blank spaces and blank lines in a file

Hi Gurus, Somebody can say me how to delete blank spaces and blank lines in a file unix, please. Thank you for advanced. (10 Replies)
Discussion started by: systemoper
10 Replies

5. Shell Programming and Scripting

Remove blank columns from a tab delimited text file

Hello, I have some tab delimited files that may contain blank columns. I would like to delete the blank columns if they exist. There is no clear pattern for when a blank occurs. I was thinking of using sed to replace instances of double tab with blank, sed 's/\t\t//g' All of the examples... (2 Replies)
Discussion started by: LMHmedchem
2 Replies

6. Shell Programming and Scripting

If first pattern is found, look for second pattern. If second pattern not found, delete line

I had a spot of trouble coming up with a title, hopefully you'll understand once you read my problem... :) I have the output of an ldapsearch that looks like this: dn: cn=sam,ou=company,o=com uidNumber: 7174 gidNumber: 49563 homeDirectory: /home/sam loginshell: /bin/bash uid: sam... (2 Replies)
Discussion started by: samgoober
2 Replies

7. Shell Programming and Scripting

Sed delete blank lines upto first pattern match

Hi Im trying to do the following in sed. I want to delete any blank line at the start of a file until it matches a pattern and then stops. for example: Input output: I have got it to work within a range of two patterns with the following: sed '/1/,/pattern/{/^]*$/d}' The... (2 Replies)
Discussion started by: duonut
2 Replies

8. Shell Programming and Scripting

Delete blank lines, if blank lines are more than one using shell

Hi, Consider a file named "testfile" The contents of file are as below first line added for test second line added for test third line added for test fourth line added for test fifth line added for test (5 Replies)
Discussion started by: anil8103
5 Replies

9. Shell Programming and Scripting

Print lines after the search string until blank line is found

All I want is to look for the pattern in the file...If I found it at # places... I want print lines after those pattern(line) until I find a blank line. Log EXAMPLE : MT:Exception caught The following Numbers were affected: 1234 2345 2346 Error java.lang.InternalError:... (3 Replies)
Discussion started by: prash184u
3 Replies

10. Shell Programming and Scripting

delete block of lines when pattern does not match

I have this input file that I need to remove lines which represents more than 30 days of processing. Input file: On 11/17/2009 at 12:30:00, Program started processing...argc=7 Total number of bytes in file being processed is 390 Message buffer of length=390 was allocated successfully... (1 Reply)
Discussion started by: udelalv
1 Replies
Login or Register to Ask a Question