Find a pattern and print next all character to next space


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Find a pattern and print next all character to next space
# 1  
Old 04-21-2010
Find a pattern and print next all character to next space

Hi,
I have a big inventory file that is NOT sorted is any way.
The file is have "tagged" information like the ip address "*IP=" or the name "*NM=" .
How do I get just the ip address or the name and not the whole line?

I have tried to use AWK without any success. I always get the whole line or just the wrong pattern.

Before:
inventory_number network_device_type placment *IP=ipaddress *NM=name *sv=severity *login=login cred.
inventory_number network_device_type *NM=name placment *IP=ipaddress *sv=severity *login=login cred.
inventory_number network_device_type placment *IP=ipaddress *NM=name *sv=severity *login=login cred.
inventory_number network_device_type placment *sv=severity *IP=ipaddress *NM=name *login=login cred.

After:
ipaddress
ipaddress
ipaddress
ipaddress

Can anyone help me with this?
Thanks!!!
# 2  
Old 04-21-2010
You should show what you have done rather than tell us the results of your efforts. This way it would be easier to tell you where you have gone wrong. Recommended reading: How to ask questions the smart way

Back to your problem: The following little sed script might do what you need, on the presumption that each line only contains one IP-address and one name, like in your example:

getting the IP address:
Code:
sed -n 's/.*\*IP=\([^ ]*\) .*$/\1/p' /path/to/inputfile

similar, for name:
Code:
sed -n 's/.*\*NM=\([^ ]*\) .*$/\1/p' /path/to/inputfile

I hope this helps.

bakunin
# 3  
Old 04-22-2010
Thanks.
I'll giv it a try.

I forgot to tell you what I am trying to do this on a Windows machine with UnxUtils "installed".

Your right!!!
I will do better in the future to show what I have done.
I'm new to scripting in shell code.

I have tried the following code without any real progress.Smilie

Code:
cat file.txt |gawk "match($0,/*IP=/){print substr($0,RSTART+4,15) "IP" }"

The problem is that I want to print to the next white space... not only 15 characters...

/Pierre

---------- Post updated 22-04-10 at 12:47 AM ---------- Previous update was 21-04-10 at 11:15 AM ----------

Hi Again,

Due to the fact that I'm is forced to work with windows I can't get it to work.
I have changed the ' to " and I still donsen't work.
I think it has to be somthing with the windows formating.

Code:
sed -n "s/.*\*IP=\([^ ]*\) .*$/\1/p" /path/to/inputfile

Result:
1
1
1
1
1
1
....

/Pierre

edit by bakunin: i edited into the text the code-tags you should have used yourself when posting code or code-snippets. Thanks for doing this yourself from now on.

Last edited by bakunin; 04-22-2010 at 08:26 AM..
# 4  
Old 04-22-2010
The command i wrote would have worked on the text you provided as example, at least it works here. If this is not the case on your side please provide a sample of your text and some version information about your system (OS, version, ...)

bakunin
# 5  
Old 04-26-2010
Hi agian,

sorry but I have tried everything so here are a pice of my orignal file.

Code:
i3421 cisco_2960 ty-3 *IP=148.138.210.226 *NM=typ_2960_ty_3 *CDP3 *sv1 *login_typass l_090212 
i5432 cisco_2950 ty-3 *CDP3 *IP=148.138.210.9 *NM=typ_2950_ty_5 *sv1 *login_typass  l_0211xx
i3465 cisco_2950 ty-3 *CDP3 *NM=typ_2950_ty_6 *IP=148.138.210.10  *sv1 *login_typass  l_0211xx
i2342 cisco_2950 ty-3 *  CDP3 *IP=148.138.211.204 *NM=typ_2950_ty_11 *sv1 *login_typass l_050105 
i7653 cisco_2960 ty-3 *CDP3  *IP=148.138.210.18 *NM=typ_2960_ty_2 *sv1 *login_typass l_090212 
i1234 cisco_29608 ty-3  *NM=typ_29608_ty_1 *IP=148.138.203.112 *sv1 *login_typass l_080930 
i6342 cisco_29608 ty-3 *IP=148.138.203.113 *NM=typ_29608_ty_2 *sv1 *login_typass l_080930

I have tried to use the following combinations to solve it.
Code:
sed -n "s/.*\*IP=\([^ ]*\) .*$/\1/p" result.txt
sed -n "s/.*\*IP=\([^ ]*\) .//p" result.txt

The closest I get is this
Code:
NM=typ_2960_ty_3 *CDP3 *sv1 *login_typass l_0
NM=typ_2960_ty_2 *sv1 *login_typass l_090212
sv1 *login_typass l_080930
NM=typ_29608_ty_2 *sv1 *login_typass l_080930

I'm using Windows XP Pro. SP3 with UnxUtils.

/Pierre
# 6  
Old 04-26-2010
The version of sed in UnxUtils is quite old, i.e. 3.0.2, according to the UnxUtils website. It might be worth downloading the latest version of sed for Windows, i.e. 4.2, from Sed for Windows.
# 7  
Old 04-26-2010
That did the trick !!!
Why didn't I think of that??

Thanks anyway..

/Pierre
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Find matched pattern and print all based on certain conditions

Hi, I am trying to extract data based on certain conditions. My sample input file as below:- lnc-2:1 OnePiece tra_law 500 688 1 . . g_id "R792.8417"# tra_law_id "R792.8417.1"# g_line "2.711647"# KM "8.723820"# lnc-2:1 OnePiece room 500 510 1 . . g_id "R792.8417"# tra_law_id "R792.8417.1"#... (7 Replies)
Discussion started by: bunny_merah19
7 Replies

2. Post Here to Contact Site Administrators and Moderators

Search for a pattern and replace a space at specific position with a Character in File

In file, we have millions of records each of 1000 in length. And at specific position say 800 there is a space, we need to replace it with Character X if the ID in that row starts with 123. So far i have used the below which is replacing space at that position to X but its not checking for... (3 Replies)
Discussion started by: Jagmeet Singh
3 Replies

3. Shell Programming and Scripting

sed -- Find pattern -- print remainder -- plus lines up to pattern -- Minus pattern

The intended result should be : PDF converters 'empty line' gpdftext and pdftotext?xml version="1.0"?> xml:space="preserve"><note-content version="0.1" xmlns:/tomboy/link" xmlns:size="http://beatniksoftware.com/tomboy/size">PDF converters gpdftext and pdftotext</note-content>... (9 Replies)
Discussion started by: Klasform
9 Replies

4. Shell Programming and Scripting

Find key pattern and print selected lines for each record

Hi, I need help on a complicated file that I am working on. I wanted to extract important info from a very huge file. It is space delimited file. I have hundred thousands of records in this file. An example content of the inputfile as below:- ## ID Ser402 Old; 23... (2 Replies)
Discussion started by: redse171
2 Replies

5. Shell Programming and Scripting

Gawk Find Pattern Print Lines Before and After

Using grep I can easily use: cvs log |grep -iB 10 -A 10 'date: 2013-10-30' to display search results and 10 lines before and after. How can this be accompished using gawk? (4 Replies)
Discussion started by: metallica1973
4 Replies

6. Shell Programming and Scripting

Print character after pattern found

Hi Gurus, i need your help to create a script the will print a characters after the pattern was found. Sample lines are below: My birthday:"1977-16-07", My birthday:"1975-16-07" My birthday:"1970-16-07". My patter should be "birthday:", then i want to print the following characters which... (18 Replies)
Discussion started by: scripter123
18 Replies

7. Shell Programming and Scripting

Print pattern regardless of space between

I have this content in file sshd : ALL : allow SSHD : all : ALLOW sshD : All : AllOW What I need is to print the occurrence of "sshd:all" regardless of the spaces between them and if lower/upper case. So all lines should be printed in output when "grepped" or "printed... (3 Replies)
Discussion started by: anil510
3 Replies

8. Shell Programming and Scripting

Find pattern in file and print

Hello, I want to read a CSV file and look for a pattern on each line. If the pattern is found I want to read another portion/column of that line and print that. Can somebody help me in writing it in CSH? E.g. CSV file has following lines, 1,Elephant,500kg,,,,, 2,Tiger,50kg,,,,,... (4 Replies)
Discussion started by: deshiashish
4 Replies

9. Shell Programming and Scripting

Print characters till the next space when the pattern is found

i have a file which contains alphanumeric data in every line. what i need is the data after certain pattern. the data after the pattern is not of fixed length so i need the data till the space after the pattern. Input file: bfdkasfbdfg khffkf lkdhfhdf pattern (datarequired data not required)... (2 Replies)
Discussion started by: gpk_newbie
2 Replies

10. Shell Programming and Scripting

How to print range of lines using sed when pattern has special character "["

Hi, My input has much more lines, but few of them are below pin(IDF) { direction : input; drc_pinsigtype : signal; pin(SELDIV6) { direction : input; drc_pinsigtype : ... (3 Replies)
Discussion started by: nehashine
3 Replies
Login or Register to Ask a Question