Don't depend on me, I need to be going back to my day job soon.
There's a number of ways to do this, obviously. The old-fashioned variant would be to remember the previous line and print that when you see the terminator. The really brute Perl approach would be to slurp the whole file and substitute everything with an empty string except the line before the terminator. There's one in the Perl FAQ about that; perlfaq6 and scroll around for related questions. (The question about C comments further down the page has some hints, too.)
But the "previous line" solution is absolutely the simplest in this case, if you have no further requirements.
Not sure about the flow control you tried to describe. Are you supposed to remember everything from main start until main end and print that after the output from the last line before main end? (I guess this already qualifies as a pseudo-code implementation of what it takes. But then maybe I would consider a regex substitution over the whole file, or each *Main Start section, after all.)
Last edited by era; 03-30-2008 at 07:22 AM..
Reason: Add a Perl snippet for remembering previous line
Hi
I'm not very good with the serach patterns and I'd need a sample how to find a line that has multiple patterns.
Say I want to find a line that has "abd", "123" and "QWERTY" and there can be any characters or numbers between the serach patterns, I have a file that has thousands of lines and... (10 Replies)
Help with script that will check log, then find a match is found, add that as the subject line.
1. The script will always run as a deamon.. and scan the event.log file
2. when a new 101 line is added to the event.log file, have the script check position 5,6 and 7 which is the job name, which... (2 Replies)
Hello, can someone help me how to find a word and 2 lines after it and then send the output to another file.
For example, here is myfile1.txt. I want to search for "Error" and 2 lines below it and send it to myfile2.txt
I tried with grep -A but it's not supported on my system.
I tried with awk,... (4 Replies)
I have a file like this
DoctorName
Address1
Address2
DOB
InsuredName
Address1
Address2
DOB
PatientName
Address1
Address2
DOB
ClaimNo1
DoctorName
Address1
Address2
DOB
InsuredName (2 Replies)
Hi All,
From the below line if we want to display all the text till found pattern dot/. I was trying with the below code but couldn't able
to print text before the pattern. it display texts which is found after pattern.
awk '/assed/{print;getline;print}' file_name | sed 's/^*. *//'
input... (4 Replies)
Hello Everyone,
I have a file with 5 fields in each line just like mentioned below. Also the 4th field is time elapsed(hh:mm:ss) since the process is running
xyz abc status 23:00:00 idle
abc def status 24:00:00 idle
def gji status 27:00:02 idle
fgh gty status 00:00:00 idle
Here I... (8 Replies)
Hi All,
totally new on it , normally use it for just 1 line.
i'm looking for help.
i'm have 2 file.
file 1 :
--------------------------------------------------
c12
c1
c3
--------------------------------------------------
file 2:
other content ... (10 Replies)
Looking for help,
i have input file like below and want to modify to expected output, if can without create additional file, hope can direct modify it.
have 2 thing need do.
1st
is adding a word (testplan generation off) after ! ! IPG: Tue Aug 07 14:31:17 2018
2nd
is adding... (16 Replies)
Discussion started by: kttan
16 Replies
LEARN ABOUT DEBIAN
tie::hash::regex
Tie::Hash::Regex(3pm) User Contributed Perl Documentation Tie::Hash::Regex(3pm)NAME
Tie::Hash::Regex - Match hash keys using Regular Expressions
SYNOPSIS
use Tie::Hash::Regex;
my %h;
tie %h, 'Tie::Hash::Regex';
$h{key} = 'value';
$h{key2} = 'another value';
$h{stuff} = 'something else';
print $h{key}; # prints 'value'
print $h{2}; # prints 'another value'
print $h{'^s'}; # prints 'something else'
print tied(%h)->FETCH(k); # prints 'value' and 'another value'
delete $h{k}; # deletes $h{key} and $h{key2};
or (new! improved!)
my $h : Regex;
DESCRIPTION
Someone asked on Perlmonks if a hash could do fuzzy matches on keys - this is the result.
If there's no exact match on the key that you pass to the hash, then the key is treated as a regex and the first matching key is returned.
You can force it to leap straight into the regex checking by passing a qr'ed regex into the hash like this:
my $val = $h{qr/key/};
"exists" and "delete" also do regex matching. In the case of "delete" all vlaues matching your regex key will be deleted from the hash.
One slightly strange thing. Obviously if you give a hash a regex key, then it's possible that more than one key will match (consider
c<$h{qw/./}>). It might be nice to be able to do stuff like:
my @vals = $h{$pat};
to get all matching values back. Unfortuately, Perl knows that a given hash key can only ever return one value and so forces scalar context
on the "FETCH" call when using the tied interface. You can get round this using the slightly less readable:
my @vals = tied(%h)->FETCH($pat);
ATTRIBUTE INTERFACE
From version 0.06, you can use attributes to define your hash as being tied to Tie::Hash::Regex. You'll need to install the module
Attribute::Handlers.
METHODS
FETCH
Get a value from the hash. If there isn't an exact match try a regex match.
EXISTS
See if a key exists in the hash. If there isn't an exact match try a regex match.
DELETE
Delete a key from the hash. If there isn't an exact match try a regex match.
AUTHOR
Dave Cross <dave@mag-sol.com>
Thanks to the Perlmonks <http://www.perlmonks.org> for the original idea and to Jeff "japhy" Pinyan for some useful code suggestions.
COPYRIGHT
Copyright (C) 2001-8, Magnum Solutions Ltd. All Rights Reserved.
LICENSE
This script is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
SEE ALSO perl(1).
perltie(1).
Tie::RegexpHash(1)perl v5.10.0 2008-06-30 Tie::Hash::Regex(3pm)