grep multiple lines


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting grep multiple lines
# 1  
Old 11-20-2006
grep multiple lines

Hi.

I have this format on a textfile:

Code:
VG Name                     /dev/vg00
   PV Name                     /dev/dsk/c16t0d0
   PV Name                     /dev/dsk/c18t0d0
   PV Name                     /dev/dsk/c16t4d0
VG Name                     /dev/vg01
   PV Name                     /dev/dsk/c18t2d0
   PV Name                     /dev/dsk/c16t2d0
VG Name                     /dev/vgsapQ45
   PV Name                     /dev/dsk/vpath8
   PV Name                     /dev/dsk/vpath6
   PV Name                     /dev/dsk/vpath7
   PV Name                     /dev/dsk/vpath5
VG Name                     /dev/vgsapT45
   PV Name                     /dev/dsk/vpath18
   PV Name                     /dev/dsk/vpath16
   PV Name                     /dev/dsk/vpath17



I want to extract the "VG Name" BUT only if the line under have "vpath" in it.

So the output I want is for this:
VG Name /dev/vgsapQ45
VG Name /dev/vgsapT45

I tried using regular expression but cant get it to span across multiple lines.
Anyone have an easy solution for this? awk, grep or egrep ???

/Jocke
# 2  
Old 11-20-2006
You can do something like that (not tested) :
Code:
awk '
     /VG Name/ {vg_name = $3 }
     /vpath/ && vg_name { print $0 ; vg_name = "" }
    ' input_file


Jean-Pierre.

Last edited by aigles; 11-20-2006 at 03:31 PM.. Reason: Correction of case on VG line selection
# 3  
Old 11-20-2006
Code:
sed -n '/^VG/{N;/vpath/s/\n.*//p}'

# 4  
Old 11-20-2006
I dont get any one to work?

Im using Solaris
# 5  
Old 11-20-2006
Try to use nawk instead of awk (I have modified my awk program, 'VG NAme' replaced by 'VG Name')
The sed solution works fine on my system.


Jean-Pierre.
# 6  
Old 11-20-2006
Reborg,

Can you please explain your code?

Thanks
# 7  
Old 11-20-2006
sure thing
Code:
sed -n '/^VG/{N;/vpath/s/\n.*//p}'

/^VG/ - search for lines starting with VG
{} - apply the enclosed when the preceeding match is made
N - append the next line to the pattern buffer
/vpath/ - search for vpath within the pattern buffer
s/\n.*//p - delete everything following the first \n then print the buffer.

depending on the system the code may aso need to be written as below becasue \n may not always be recognised.

Code:
sed -n '/^VG/{N;/vpath/s/
.*//p}'

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Exclude multiple lines using grep

Hi, I'm working on a shell script that reports service status on a database server. There are some services that are in disabled status that the script should ignore and only check the services that are in Enabled status. I output the service configuration to a file and use that information to... (5 Replies)
Discussion started by: senthil3d
5 Replies

2. Shell Programming and Scripting

Grep and display multiple lines

Hi guys, I have a log file that generates multiple logs about a query. <query time='2016-04-13 13:01:50.825'> <PagingRequestHandler> <Before>brand:vmu</Before> <After>brand:vmu</After> </PagingRequestHandler> <GroupDeviceFilterHandler> <Before>brand:vmu</Before> ... (3 Replies)
Discussion started by: Junaid Subhani
3 Replies

3. Shell Programming and Scripting

Grep and exttract multiple lines

Hello: I am trying to use grep in cygwin to do the following, however I am unable to get the output in the desired format. Please see and let me know how to solve this Input log file 20140403 07:29:26 IN:CTRL=:TYP=TYP1:DCN=DCN1:DATA= 20140403 07:25:26 IN:CTRL=:TYP=TYP1:DCN=DCN2:DATA=... (4 Replies)
Discussion started by: wincrazy
4 Replies

4. Shell Programming and Scripting

grep from multiple lines in several gz files

Hello all, I have been struggling to get grep work to my requirements. Basically I have to filter out patterns spread across multiple lines over hundreds of .gz files in a folder. And the output needs to be piped to a file. Here is the example: folder name: logs files in this folder:... (4 Replies)
Discussion started by: mandhan
4 Replies

5. UNIX for Dummies Questions & Answers

Grep multiple lines

I want to grep multiple lines from a text file. I want to grep all lines containing X,Y and NA in a single command. How do I go about doing that? This is what my text files look like: rs1983866 0.0983 10 100016313 rs1983865 0.5994 X 100016339 rs1983864 0.3272 11 100017453 rs7077266... (2 Replies)
Discussion started by: evelibertine
2 Replies

6. UNIX for Advanced & Expert Users

grep across multiple lines

How do you grep 'select * from table_name' string from a script if the select * and from table_name are on 2 different lines ? like select * from table_name Any help would be greatly appreciated !!! Thanks RDR (4 Replies)
Discussion started by: RDR
4 Replies

7. UNIX for Dummies Questions & Answers

grep in multiple lines

hi i have kind of below text in a file. I want to get a complete paragraph starting with START and ending with before another START) which has a particular string say XYZ or ABC START XYZ hshjghkjh 45 ljkfd fldjlj d jldf START 3493u ABC 454 4545454 4545454 45454 4545454 START ...... (3 Replies)
Discussion started by: reldb
3 Replies

8. UNIX for Dummies Questions & Answers

grep command to find multiple strings in multiple lines in a file.

I want to search files (basically .cc files) in /xx folder and subfolders. Those files (*.cc files) must contain #include "header.h" AND x() function. I am writing it another way to make it clear, I wanna list of *.cc files that have 'header.h' & 'x()'. They must have two strings, header.h... (2 Replies)
Discussion started by: ritikaSharma
2 Replies

9. Shell Programming and Scripting

grep multiple lines

Hey guys: I've been meaning to post this question for awhile...it is regarding grep. Let's say for example that the following entry is in logxx: Wed Feb 2 07:44:11 <vsm> 91030 Line 5 Severity 1 Vps 6 Call Answered - DN:8753101 CLID:5164665761 PI:83 If I do a grep 91030... (27 Replies)
Discussion started by: cdunavent
27 Replies

10. Shell Programming and Scripting

Grep on multiple lines

I 'm trying to grep 2 fieldds on 2 differnt lines. Like this: psit > file egrep -e '(NS|ES)' $file. Not working. If this succeeds then run next cmd else exit. Pls Help Gundu (13 Replies)
Discussion started by: gundu
13 Replies
Login or Register to Ask a Question