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


Login or Register for Dates, Times and to Reply

 
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  
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 08:04 PM.. Reason: code tags
# 2  
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  
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  
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  
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  
Code:
sed -n '/fruitend/b blk;H;$b blk;b;:blk;x;s/^\(fruitend\)*\n//;/PATTERN/!P' <file

--
Bye
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #122
Difficulty: Easy
Linux has been certified as UNIX (2019).
True or False?

10 More Discussions You Might Find Interesting

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

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

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

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

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

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

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

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

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

10. UNIX for Advanced & Expert Users

sed match closest/nearest pattern

All i am struggling to raplace some text in a line between two (closest) patterns , line="/home/usr/bin/:/home/usr/devuser,n1.9/bin:/home/usr/root/bin" i want to replace "devuser,n1.9" with "NEWVAL", basically all teh text from "devuser" until nearest '/' with some new text. i tried teh... (1 Reply)
Discussion started by: sudheer1984
1 Replies

Featured Tech Videos