Today (Saturday) We will make some minor tuning adjustments to MySQL.

You may experience 2 up to 10 seconds "glitch time" when we restart MySQL. We expect to make these adjustments around 1AM Eastern Daylight Saving Time (EDT) US.


Print 2 matching pattern


Login or Register to Reply

 
Thread Tools Search this Thread
# 1  
Print 2 matching pattern

How to a first 3 lines lines that matches 1st pattern and 1 line that matches 2nd line.

Sample.txt
Code:
Line 1: /*--- ABC_BA_ABCABC -----*/
Line 2:
Line 3: insert_job: ABC_BA_ABCABC job_type: BOX
Line 4: blah blah
Line 5: max_run_alarm: 5
Line 6: blah blah
----
-----
Line 20: /*--- BCD_CA_BCDBCD -----*/
Line 21:
Line 22: insert_job: BCD_CA_BCDBCD job_type: CMD
Line 23: blah blah
Line 24: blah blah
Line 25: blah blah
Line 26: max_run_alarm: 5
Line 27: blah blah
--
--
--
Line 50: /*--- CDE_CA_CDECDE -----*/
Line 51:
Line 52: insert_job: CDE_CA_CDECDE job_type: CMD
Line 53: blah blah
Line 54: blah blah
Line 57: max_run_alarm: 5
Line 58: blah blah

I could get first 3 lines using grep -B 3 'insert_job'
The lines between 1st pattern and 2nd pattern are not consistent.

Need output as shown below
Code:
Line 1: /*--- ABC_BA_ABCABC -----*/
Line 2:
Line 3: insert_job: ABC_BA_ABCABC job_type: BOX
Line 5: max_run_alarm: 5

Line 20: /*--- BCD_CA_BCDBCD -----*/
Line 21:
Line 22: insert_job: BCD_CA_BCDBCD job_type: CMD
Line 26: max_run_alarm: 5

Line 50: /*--- CDE_CA_CDECDE -----*/
Line 51:
Line 52: insert_job: CDE_CA_CDECDE job_type: CMD
Line 57: max_run_alarm: 5

Ignore Line#n. That is to show that the lines between pattern 1 and pattern 2 are not consistent

Appreciate your help.
# 2  
how about:
Code:
awk '/[/][*]---/,/insert_job/;/max_run_alarm/{print $0 ORS}' myFile

These 2 Users Gave Thanks to vgersh99 For This Post:
# 3  
Note: it is best to escape the / inside the square bracket expression when used inside a regex constant, to prevent it from being confused with the closing / of the regex constant. Some awks cannot handle that.
Code:
awk '/[\/][*]---/,/insert_job/...

or
Code:
awk '/\/[*]---/,/insert_job/...

or
Code:
awk '$0~"/[*]---",/insert_job/...


Last edited by Scrutinizer; 02-10-2019 at 05:35 AM..
These 2 Users Gave Thanks to Scrutinizer For This Post:
# 4  
Quote:
Originally Posted by bobbygsk
Code:
Line 1: /*--- ABC_BA_ABCABC -----*/
Line 2:
Line 3: insert_job: ABC_BA_ABCABC job_type: BOX
Line 4: blah blah
Line 5: max_run_alarm: 5
Line 6: blah blah
----
-----
Line 20: /*--- BCD_CA_BCDBCD -----*/
Line 21:
Line 22: insert_job: BCD_CA_BCDBCD job_type: CMD
Line 23: blah blah
Line 24: blah blah
Line 25: blah blah
Line 26: max_run_alarm: 5
Line 27: blah blah
--
--
--
Line 50: /*--- CDE_CA_CDECDE -----*/
Line 51:
Line 52: insert_job: CDE_CA_CDECDE job_type: CMD
Line 53: blah blah
Line 54: blah blah
Line 57: max_run_alarm: 5
Line 58: blah blah

Need output as shown below
Code:
Line 1: /*--- ABC_BA_ABCABC -----*/
Line 2:
Line 3: insert_job: ABC_BA_ABCABC job_type: BOX
Line 5: max_run_alarm: 5

Line 20: /*--- BCD_CA_BCDBCD -----*/
Line 21:
Line 22: insert_job: BCD_CA_BCDBCD job_type: CMD
Line 26: max_run_alarm: 5

Line 50: /*--- CDE_CA_CDECDE -----*/
Line 51:
Line 52: insert_job: CDE_CA_CDECDE job_type: CMD
Line 57: max_run_alarm: 5

Ignore Line#n. That is to show that the lines between pattern 1 and pattern 2 are not consistent
Ignoring the line numbers is OK, but right now there is a number, then a colon and then a space. Only then the text begins. I am not sure if the space is in your data or not, but suppose it isn't. If it is there you will have to adjust the following regexps accordingly.

Code:
sed -n '/^\/\*---/ {N;N;p};/^max_run_alarm:/p' /path/to/your/file

Your partial solution with grep -B should be avoided: "-B" is a non-standard extension to the standard grep and you can never be sure if the grep version of every system is able to understand that. It is a hard (and usually painful) lesson you learn from administrating large datacenters with hundreds or even thousands of various systems that you stick to the standards religiously because that is basically what system is "guaranteed to understand".

I hope this helps.

bakunin
These 2 Users Gave Thanks to bakunin For This Post:
# 5  
Thank you - vgersh99, Scrutinizer, bakunin

Earlier I had to do it in 4-5 steps. Now I can do it in 1 easy step, thanks to you all
Login or Register to Reply

|
Thread Tools Search this Thread
Search this Thread:
Advanced Search

More UNIX and Linux Forum Topics You Might Find Helpful
Print lines after matching two pattern
jhonnyrip
would like to print everything after matching two patterns AAA and BBB. output : CCC ZZZ sample data : AAA BBB CCC ZZZ... Shell Programming and Scripting
4
Shell Programming and Scripting
How to print all the lines after pattern matching?
ankitknit
I have a file that contains... Number -------------------- 1 2 3 4 i want to print all the numbers after the hyphen ...... Shell Programming and Scripting
6
Shell Programming and Scripting
sed print matching pattern
ysrini
Hi, i have data file like: START1 a b STOP c d START2 e STOP f START3 g STOP When one of the START<count> variable is passed, i should print all lines matching this until the first 'STOP' for example if 'START2' is provided for match, i should get the result as: START2... UNIX for Dummies Questions & Answers
1
UNIX for Dummies Questions & Answers
I want to print next 3 lines after pattern matching.
naree
Dear Experts, I have file called file1 in which i am greping a pattern after that i want to next 3 lines when that pattern is matched. Ex:- file1 USA UK India Africa Hello Asia Europe Australia Hello Peter Robert Jo i want to next 3 lines after matching Hello...... Shell Programming and Scripting
12
Shell Programming and Scripting
pattern matching and print with sed
nymus7
Hi It is possible with sed to print a pattern within a line matching regexp? So, the line looks like : 19:00:00 blablablabla jobid 2345 <2> the regexp is "jobid 2345" and the pattern is 56434. That the code for find...... Shell Programming and Scripting
2
Shell Programming and Scripting

Featured Tech Videos