Visit Our UNIX and Linux User Community


Grep multiple pattern


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Grep multiple pattern
# 1  
Old 07-19-2014
Scissors Grep multiple pattern

I have got a text
from each line, I need to fetch port only if there is an ip

Code:
a.text text  and port=25
b.ip=(12.32.54.256) and port="52"
c.ip=(55.251.253.12) and port=25"
d.text text and port="5"
e.ip=(45.211.155.15) and port="457"
f.ip=(144.158.256.2) and port="588"

I know how to fetch ip per line:
Code:
awk 'BEGIN{ RS="<\n>"}1' file | grep -oP "(?<=ip=\()[^)]*"

(well in this case, awk is not very usefull, but in the actual file, it is)

I know how to grab ports individually:

Code:
grep -oP "(?<=port=\")[^\"]*" file

but I do not know how to grab both and only both (line a and d should not be in the output)

Thanx in advance folks!

Last edited by Scrutinizer; 07-19-2014 at 06:26 PM.. Reason: Additional CODE tags
# 2  
Old 07-19-2014
How about:
Code:
awk -F'port="?|"' '/ip=/{print $2}' file

Output:
Code:
52
25
457
588

--
Or:
Code:
sed -n 's/.*ip.*port="*\([^"]*\).*/\1/p' file


Last edited by Scrutinizer; 07-19-2014 at 06:27 PM..
# 3  
Old 07-19-2014
thanx Scrutinizer

Code:
awk -F'port="?|"' '/ip=/{print $2}' file

prints ports only.
# 4  
Old 07-19-2014
OK, do you need ip as well ? How about:
Code:
awk -F'ip=[(]|[)]|port="?|"' '/ip=/{print $2,$4}' file

Output:
Code:
12.32.54.256 52
55.251.253.12 25
45.211.155.15 457
144.158.256.2 588

--
Or
Code:
sed -n 's/.*ip=(\([^)]*\).*port="*\([^"]*\).*/\1 \2/p' file

# 5  
Old 07-19-2014
thanx again Scrutinizer!

both
Code:
awk -F'ip=[(]|[)]|port="?|"' '/ip=/{print $2,$4}' file

and
Code:
sed -n 's/.*ip=(\([^)]*\).*port="*\([^"]*\).*/\1 \2/p' file

work. (do you know how to do it with grep?)
# 6  
Old 07-19-2014
Using GNU grep like you are using, and using its perl regex feature, I can see this possibility:
Code:
grep -oP '(?<=ip=\()[^)]*|((?<=\) and port=")|(?<=\) and port=))[^"]*' file

You need to use two alternate look behinds for port, since there may or may not be a double quote around the port number as your sample shows, and lookbehinds need to be fixed length.

But the ip and port will not be on the same line, so you would need something like:
Code:
grep -oP '(?<=ip=\()[^)]*|((?<=\) and port=")|(?<=\) and port=))[^"]*' file | xargs -n2


--
another option would be an extra grep stage:
Code:
grep ip= file | grep -oP '(?<=ip=\()[^)]*|((?<=port=")|(?<=port=))[^"]*' | paste - -

here shown with paste instead of xargs, which uses a TAB, which may be nicer

Last edited by Scrutinizer; 07-20-2014 at 06:31 AM..
# 7  
Old 07-20-2014
Thanx again Scrutinizer;
Your solution with grep is pretty cool.
To be honest, the missing -"- was a typo. it gave additional work. Sorry for that. Have a nice day!

Previous Thread | Next Thread
Test Your Knowledge in Computers #884
Difficulty: Easy
A backdoor in a computer system, a cryptosystem or an algorithm, is any secret method of bypassing normal authentication or security controls.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sed and awk usage to grep a pattern 1 and with reference to this grep a pattern 2 and pattern 3

Hi , I have a file where i have modifed certain things compared to original file . The difference of the original file and modified file is as follows. # diff mir_lex.c.modified mir_lex.c.orig 3209c3209 < if(yy_current_buffer -> yy_is_our_buffer == 0) { --- >... (5 Replies)
Discussion started by: breezevinay
5 Replies

2. Linux

Creating 2 variables from a multiple pattern grep

first time poster here Im pretty new to grep and linux in general and I spent pretty much all day yesterday researching and coming up with a grep command to help with my university project. I am attempting to create a proof of concept bash script to scan the network using ngrep, find appropriate... (7 Replies)
Discussion started by: scottish_jason
7 Replies

3. Shell Programming and Scripting

Grep text between multiple pattern

Hello everybody, I have been looking around but can't figure how to do a grep command, that find the text between multiple patterns, example: (pattern1 OR pattern2) AND (pattern3 OR pattern4) text that I want (pattern5 OR pattern6) AND (pattern7 OR pattern8) So how do I find the "text... (4 Replies)
Discussion started by: Benou
4 Replies

4. Shell Programming and Scripting

Help to search multiple pattern in file with grep/sed/awk

Hello All, I have a file which is having below type of data, Jul 19 2011 | 123456 Jul 19 2011 | 123456 Jul 20 2011 | 123456 Jul 20 2011 | 123456 Here I wanted to grep for date pattern as below, so that it should only grep "Jul 20" OR "Jul ... (9 Replies)
Discussion started by: gr8_usk
9 Replies

5. Shell Programming and Scripting

Grep command with multiple pattern

Hi, I want to search multiple patterns in a variable. DB_ERR=`echo "$DB_TRANS" | grep "SP2-" | grep "ORA-"` echo $DB_ERR But I am not getting anything in DB_ERR. I want to print each line on seperate line. Could you please help me out in this. Thanks in advance. (14 Replies)
Discussion started by: Poonamol
14 Replies

6. Shell Programming and Scripting

How to grep multiple pattern from XML file

Hi Everyone pls if anyone can help me in writing a script or correcting it what I have done. I want to write a script to grep record number for all those record which have abc xyd cat dog in one of the field say VALUE, I have thousand of file in a dir and I want to search every file for... (6 Replies)
Discussion started by: revertback
6 Replies

7. Shell Programming and Scripting

Grep multiple line pattern and output the lines

Hi I have the following Input -- -- TABLE: BUSINESS_UNIT -- ALTER TABLE RATINGS.BUSINESS_UNIT ADD CONSTRAINT FK1_BUSINESS_UNIT FOREIGN KEY (PEOPLESOFT_CHART_FIELD_VALUE_ID) REFERENCES RATINGS.PEOPLESOFT_CHART_FIELD_VALUE(PEOPLESOFT_CHART_FIELD_VALUE_ID) ; ALTER TABLE... (1 Reply)
Discussion started by: pukars4u
1 Replies

8. Shell Programming and Scripting

Grep with multiple instances of same pattern

Hi, This is my text file I'm trying to Grep. Apple Location Greenland Rdsds dsds fdfd ddsads http Received Return Immediately Received End My Grep command: grep only--matching 'Location.*Received' Because the keyword Received appears twice, the Grep command will stop at the last... (3 Replies)
Discussion started by: spywarebox
3 Replies

9. Shell Programming and Scripting

Grep with multiple instances of same pattern

Hi, This is my text file I'm trying to Grep. Apple Location Greenland Rdsds dsds fdfd ddsads http Received Return Immediately Received End My Grep command: grep only--matching 'Location.*Received' e. Because the keyword Received appears twice, the Grep command will stop at the last... (0 Replies)
Discussion started by: spywarebox
0 Replies

10. Solaris

Multiple pattern on same line using grep

Hi, I would like to search multiple patterns on same line, i.e. all patterns must present on same line. Please suggest. Thanx (2 Replies)
Discussion started by: sanjay1979
2 Replies

Featured Tech Videos