help! Pattern Matching in vi or sed


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting help! Pattern Matching in vi or sed
# 1  
Old 06-30-2010
help! Pattern Matching in vi or sed

I have a bunch of conf files, that contain the fully qualified names of servers. I would like to be able to use some sort of pattern matching with sed or vi, or whatever, to pull out the fully qualified server names, and dump them in a file.

It just needs to work across several unix os. So, I have been using vi. That works, but it takes about 8 pattern matches to whittle the conf file down to just the fully qualified server names. And each conf file is slightly different, so the same pattern of substitutions doesn't work on all the conf files.

I can get close with just a search "[^ ]*.domain.com" in vi, but I don't want to match the names, I want to exclude them, unless I can pull all of the matches out and put them in a new file. However, I could not figure out if you can do that either...

Far better to delete everything but "[^ ]*.domain.com"

Does someone know how to do that in a substitution, or some other command?

Any help appreciated!
# 2  
Old 06-30-2010
Post your input and desired output.
# 3  
Old 07-01-2010
Quote:
Originally Posted by bartus11
Post your input and desired output.
I am not at work, and won't be for a few days...I'll see if I can get a hold of it. In the interium, this should give you an idea.

I think I misquoted the search that worked. I believe it should be:

"[^ ].*.domain.com"


Conf file reads like a typical shell script, with server names in the logic statements.

From memory, the typical area in question goes like:

-------------------------------------------
variable= {

"server1.domain.com", "server2.domain.com",
"server3.domain.com", "server4.domain.com", };

If <something> == server1.domain.com || <something> == server5.domain.com
then <stuff>
else <other stuff> server3.domain.com
fi
----------------------------------------------

That is just a sample, it is usually a couple pages of logic, with server names interspersed.

All I want is a list of servers from that code, which would look like this:

server1.domain.com
server2.domain.com
server3.domain.com
server4.domain.com
server1.domain.com
server5.domain.com
server3.domain.com

Which I can then sort with "cat list | sort -u | sort -n > newer_list" to get a single unique list of servers .

Basically, just either extracting the server names, queing off the domain name, or delete every but the servernames. I'd make a copy of the file, and use that, of course

Thanks!

Last edited by tabini; 07-01-2010 at 01:23 AM..
# 4  
Old 07-01-2010
This should extract fully quafilied names:
Code:
perl -0777 -ne'$,="\n";print /[^ "]+\.domain\.com/g; print "\n"' file

And this only hostnames:
Code:
perl -0777 -ne'$,="\n";print /[^ "]+(?=\.domain\.com)/g; print "\n"' file

This User Gave Thanks to bartus11 For This Post:
# 5  
Old 07-01-2010
Awesome! I'll give that a try.

Thanks again!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Use sed to get first matching pattern

HI, I have a file: listenerport: - 1521 - 10520 - 10521 - 10522 - 10523 instances: listenerport: listenerport: - 1521 - 10540 - 10541 - 10542 - 10543 instances: ... (5 Replies)
Discussion started by: netbanker
5 Replies

2. Shell Programming and Scripting

Sed: printing lines AFTER pattern matching EXCLUDING the line containing the pattern

'Hi I'm using the following code to extract the lines(and redirect them to a txt file) after the pattern match. But the output is inclusive of the line with pattern match. Which option is to be used to exclude the line containing the pattern? sed -n '/Conn.*User/,$p' > consumers.txt (11 Replies)
Discussion started by: essem
11 Replies

3. UNIX for Dummies Questions & Answers

sed print matching pattern

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 (1 Reply)
Discussion started by: ysrini
1 Replies

4. Shell Programming and Scripting

Help with sed pattern matching

Hi My log file is Testtmp2 cat Testtmp2 12:12:38 12:14:29 12:17:34 12:19:08 12:20:10 12:21:35 12:22:20 12:22:26 12:22:34 12:22:38 12:28:14 12:31:35 12:32:50 12:33:04 (3 Replies)
Discussion started by: rahkumar
3 Replies

5. Shell Programming and Scripting

SED pattern matching help

Hello All, I have the following lines in a file <address location="test" ConnectionName="test" /> I want to replace the above lines by <address location="test123" /> I am usind SED and not able to remove the new line characters between the two lines. Can anyone please help... (4 Replies)
Discussion started by: ramk
4 Replies

6. Shell Programming and Scripting

sed pattern matching

Unfortunately this chap has been banned for some reason and I was looking forward to the resolution of his question: - https://www.unix.com/shell-programming-scripting/123118-append-position-28-33-a.html He was asking if you can use sed to match a pattern you want to replace within a... (6 Replies)
Discussion started by: steadyonabix
6 Replies

7. Shell Programming and Scripting

sed pattern matching

Hi all, if I have the following piece (repeating) of text within a file and I wish to delete it via sed a b c d e <tr> <td><img alt="" height="1" width="3" src="/testweb/view/browser/images/shim.gif"></td><td><img alt="" height="1" ... (4 Replies)
Discussion started by: srage
4 Replies

8. Shell Programming and Scripting

sed - matching pattern one but not pattern two

All, I have the following file: -------------------------------------- # # /etc/pam.d/common-password - password-related modules common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of modules that define the services... (2 Replies)
Discussion started by: RobertBerrie
2 Replies

9. Shell Programming and Scripting

sed pattern matching

Hi, I have a file which contains a word like ravi and ravi30. i want to replace only the word ravi with xxx for that i am using the below sed command sed -e 's/ravi/xxx/g' . but the above command out put is xxx and xxx30 but i dont need to change ravi30 please guide me how to proceed.... (4 Replies)
Discussion started by: ravi_rn
4 Replies

10. Shell Programming and Scripting

Pattern matching sed

MSG="THERE WERE XX RECORDS IN ERROR TABLE,AAAA, WHEN LOADING THE BBBB TABLE WITH EXTRACT FROM CCCC INTO TABLES FOR , DATABASE DDDD." echo "$MSG" > /tmp/mplanmsg.$$.out I wan to replace XX with the content in $recordXX cat /tmp/mplanmsg.$$.out|sed 's/XX/\$recordXX/g'| sed... (3 Replies)
Discussion started by: leemjesse
3 Replies
Login or Register to Ask a Question