Using sed to pattern match within a particular multiline block and take action


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Using sed to pattern match within a particular multiline block and take action
# 1  
Old 10-03-2012
Using sed to pattern match within a particular multiline block and take action

Hi all,
This is my first post, so please go easy if I broke some rules. Not accustomed to posting in forums... Smilie

I'm looking for help on pattern matching within a multiline block and looking to highlight blocks/block-ids that do NOT contain a particular pattern.

For example an input file might contain the following:

Code:
fruit APPLE
   blah1
   PATTERN
   blah2
fruitend

fruit ORANGE
blah1
blah2
blah3
fruitend

fruit KIWI
PATTERN
blah1
blah2
fruitend

In the above case, I would like the block of ORANGE or the keyword ORANGE printed, since the recognized pattern was not found.

I've been playing around with this for a while with no desired results found!! Smilie

Code:
sed -n '
/fruit /,/fruitend/ {H;g;s/\n//g;}
/PATTERN/ !p;
/fruit /,/fruitend/ !h;
'


Those results are the closest I can get to what I really want of:

Code:
    fruit ORANGE

being the only listed output.


I figured out another way to do it, but was hoping to do it in one sed. I figured out if I pipe it through another sed statement like this:

Code:
<PREVIOUS OUTPUT>  | sed -n 's/fruit \([A-Z]*\).*fruitend/\1/p'

That will print ORANGE only.

Last edited by Scrutinizer; 10-03-2012 at 07:04 PM.. Reason: code tags
# 2  
Old 10-03-2012
If the are empty lines between the records, you could try:
Code:
awk '!/PATTERN/' RS= infile

This User Gave Thanks to Scrutinizer For This Post:
# 3  
Old 10-03-2012
With sed, try this:
Code:
sed -n '/^$/b blk;H;$b blk;b;:blk;x;s/\n//;/PATTERN/!P' <file

--
Bye
This User Gave Thanks to Lem For This Post:
# 4  
Old 10-03-2012
Hey Guys... thanks for the replies so far.
I'm sorry that I forgot to mention that there are no blanks in between. So yeah it makes it a little more hairy. I was trying to break it apart into a bunch of easy tasks as I built out what I had gotten to so far. I'll check some of those suggestions out tomorrow out and tinker with commands to try to figure it out again tomorrow. (I'll repost if I figure something out).

Thanks,
Bobby
# 5  
Old 10-04-2012
A quick solution might be to introduce the blank lines in an extra step:
Code:
awk '$1=="fruit"{print x}1' infile | awk '!/PATTERN/' RS=

# 6  
Old 10-04-2012
Code:
sed -n '/fruitend/b blk;H;$b blk;b;:blk;x;s/^\(fruitend\)*\n//;/PATTERN/!P' <file

--
Bye
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Get range out using sed or awk, only if given pattern match

Input: START OS:: UNIX Release: xxx Version: xxx END START OS:: LINUX Release: xxx Version: xxx END START OS:: Windows Release: xxx Version: xxx ENDHere i am trying to get all the information between START and END, only if i could match OS Type. I can get all the data between the... (3 Replies)
Discussion started by: Dharmaraja
3 Replies

2. Shell Programming and Scripting

Pattern match with awk/sed - help

I need to grep for the pattern text inside the square brackets which are in red and not in green..my current code greps patterns both of them, which i don't want Input fileref|XP_002371341.1| oxoacyl-ACP reductase, putative gb|EPT24759.1| 3-ketoacyl-(acyl-carrier-protein) reductase ... (2 Replies)
Discussion started by: selvankj
2 Replies

3. Shell Programming and Scripting

sed : match one pattern then the next consecutive second pattern not working

Ive used this snippet of code on a solaris box thousands of times. But it isnt working on the new linux box sed -n '/interface LoopBack0/{N;/ ip address /p;}' *.conf its driving me nuts !! Is there something Im missing ? (7 Replies)
Discussion started by: popeye
7 Replies

4. UNIX for Dummies Questions & Answers

sed multiline pattern match

How can I write a script that takes a cisco config file and outputs every occurrence of two, or more, pattern matches through the whole config file? For example, out of a config file, i want to print out every line with interface, description and ip address through the whole file, and disregard... (3 Replies)
Discussion started by: knownasthatguy
3 Replies

5. Shell Programming and Scripting

Sed Pattern Match

Hi, I would like to use SED to do the following string replacement: asd1abc to www1cda asd2abc to www2cda ... asd9abc to www9cda I can use 'asd.abc' to find the orignal string, however I don't know how to generate the target string. Any suggestion? Thanks, ... (2 Replies)
Discussion started by: mail4mz
2 Replies

6. Shell Programming and Scripting

Match a pattern starting with sub-pattern using sed

Hi all, I've been experiencing a difficulty trying to match a number and write it to a new file. My input file is: input.txt It contains the lines: 103P 123587.256971 3.21472112 3.1517423 1.05897234566427 58.2146258 12.35478 25.3612489 What would be the sed command to... (17 Replies)
Discussion started by: Biederman
17 Replies

7. Shell Programming and Scripting

sed pattern match problem

Hi all, hoping this is a simple one, tried looking but just can't see the solution As an example I've got a list of words that all start Ben..... Bendicks Benefiber Ben Benylin I need to only change the line Ben with Ben 10, ignoring the other lines. I tried the following ... (1 Reply)
Discussion started by: mrpugster
1 Replies

8. Shell Programming and Scripting

Multiline pattern search using sed or awk

Hi friends, Could you please help me to resolve the below issue. Input file :- <Node> <username>abc</username> <password>ABC</password> <Node> <Node> <username>xyz</username> <password>XYZ</password> <Node> <Node> <username>mnp</username> ... (3 Replies)
Discussion started by: haiksuresh
3 Replies

9. 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

10. Shell Programming and Scripting

Awk match a multiline pattern

Hello! i wanna match in a config file, one text with more than one lines, something like this: CACHE_SIZE{ 10000 M } I have problems with the ends of line, i think that i can match the end of the line with \n, but i can't get it Someone can help me with the regular expression? ... (18 Replies)
Discussion started by: claw82
18 Replies
Login or Register to Ask a Question