Sponsored Content
Top Forums Shell Programming and Scripting Using sed to pattern match within a particular multiline block and take action Post 302709917 by tirodad on Wednesday 3rd of October 2012 06:00:51 PM
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
 

10 More Discussions You Might Find Interesting

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

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

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

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

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

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

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

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

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

10. 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
USORT(3)								 1								  USORT(3)

usort - Sort an array by values using a user-defined comparison function

SYNOPSIS
bool usort (array &$array, callable $value_compare_func) DESCRIPTION
This function will sort an array by its values using a user-supplied comparison function. If the array you wish to sort needs to be sorted by some non-trivial criteria, you should use this function. Note If two members compare as equal, their relative order in the sorted array is undefined. Note This function assigns new keys to the elements in $array. It will remove any existing keys that may have been assigned, rather than just reordering the keys. PARAMETERS
o $array - The input array. o $value_compare_func - The comparison function must return an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second. int callback (mixed $a, mixed $b) Caution Returning non-integer values from the comparison function, such as float, will result in an internal cast to integer of the callback's return value. So values such as 0.99 and 0.1 will both be cast to an integer value of 0, which will compare such values as equal. RETURN VALUES
Returns TRUE on success or FALSE on failure. EXAMPLES
Example #1 usort(3) example <?php function cmp($a, $b) { if ($a == $b) { return 0; } return ($a < $b) ? -1 : 1; } $a = array(3, 2, 5, 6, 1); usort($a, "cmp"); foreach ($a as $key => $value) { echo "$key: $value "; } ?> The above example will output: 0: 1 1: 2 2: 3 3: 5 4: 6 Note Obviously in this trivial case the sort(3) function would be more appropriate. Example #2 usort(3) example using multi-dimensional array <?php function cmp($a, $b) { return strcmp($a["fruit"], $b["fruit"]); } $fruits[0]["fruit"] = "lemons"; $fruits[1]["fruit"] = "apples"; $fruits[2]["fruit"] = "grapes"; usort($fruits, "cmp"); while (list($key, $value) = each($fruits)) { echo "$fruits[$key]: " . $value["fruit"] . " "; } ?> When sorting a multi-dimensional array, $a and $b contain references to the first index of the array. The above example will output: $fruits[0]: apples $fruits[1]: grapes $fruits[2]: lemons Example #3 usort(3) example using a member function of an object <?php class TestObj { var $name; function TestObj($name) { $this->name = $name; } /* This is the static comparing function: */ static function cmp_obj($a, $b) { $al = strtolower($a->name); $bl = strtolower($b->name); if ($al == $bl) { return 0; } return ($al > $bl) ? +1 : -1; } } $a[] = new TestObj("c"); $a[] = new TestObj("b"); $a[] = new TestObj("d"); usort($a, array("TestObj", "cmp_obj")); foreach ($a as $item) { echo $item->name . " "; } ?> The above example will output: b c d Example #4 usort(3) example using a closure to sort a multi-dimensional array <?php $array[0] = array('key_a' => 'z', 'key_b' => 'c'); $array[1] = array('key_a' => 'x', 'key_b' => 'b'); $array[2] = array('key_a' => 'y', 'key_b' => 'a'); function build_sorter($key) { return function ($a, $b) use ($key) { return strnatcmp($a[$key], $b[$key]); }; } usort($array, build_sorter('key_b')); foreach ($array as $item) { echo $item['key_a'] . ', ' . $item['key_b'] . " "; } ?> The above example will output: y, a x, b z, c SEE ALSO
uasort(3), The comparison of array sorting functions. PHP Documentation Group USORT(3)
All times are GMT -4. The time now is 11:20 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy