Help with sed/grep


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Help with sed/grep
# 1  
Old 02-17-2014
Help with sed/grep

Hello Everyone!

I'm kind of new to parsing and would like extract a partial part of my nmap scan output so I can convert it to csv/excel:

My current file has two types of lines like this:
Code:
Nmap scan report for dns1 (1.1.1.1)
Nmap scan report for dns2 (2.2.2.2)
Nmap scan report for 3.3.3.3

I want to be able to extract it as :
Code:
dns1, 1.1.1.1
dns2, 2.2.2.2
3.3.3.3

The file has 100+ lines.

Any help is great appreciated! Thanks in advance Smilie

Last edited by Scrutinizer; 02-17-2014 at 11:07 PM.. Reason: code tags
# 2  
Old 02-18-2014
Code:
awk '{gsub(/.*for |\(|\)/,x);$1=$1}1' OFS=, file

# 3  
Old 02-18-2014
If the format is fixed, then you may use the following as well:
Code:
awk -F' ' '{print $5", "$6}' input.txt

# 4  
Old 02-18-2014
You probably want to learn how to do it yourself instead of getting a ready-made recipe, so i will explain it step by step:

The example line you have shown are treated by two steps:

1) remove the (fixed?) string "Nmap scan report for " from the beginning of the line.
2) add a comma between word 1 and the rest if there are more than two words.
3) Remove braces around IP-Addresses

Let us start with the first, which is easy: replace the fixed string with nothing. We "anchor" the fixed string we are searching for at the beginning of the line by using the "^" metacharacter (meaning "beginning of the line"):

Code:
sed 's/^Nmap scan report for //' /path/to/input

Let this run, observe the results and continue if you are satisfied with them. Note that we do NOT write anything to disk, so we can refine and repeat any change which is only close to what we want.

Next we add code for the comma: there are two words only if there is a sequence that goes "(any number of) non-blank characters, followed by a blank, followed by other non-blank characters". If we find such a sequence we change it by adding a comma before the blank. Replace "<b>" by literal blanks in the following:

Code:
sed 's/^Nmap scan report for //
    s/^\([^<b>][^<b>]*\) \([^<b>][^<b>]*\)/\1, \2/' /path/to/input

Now to the last part: removing the braces. First, let us find out what an "IP-Adress" looks like: 4 groups of numbers, divided by 3 dots:

Code:
[0-9][0-9][0-9]\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]

Upon closer inspection, the first digit in each number can only be 0-2 and the first two digits are optional:

Code:
[0-2]*[0-9]*[0-9]\.[0-2]*[0-9]*[0-9]\.[0-2]*[0-9]*[0-9]\.[0-2]*[0-9]*[0-9]

Let us seek for this and remove any braces surrounding it:

Code:
sed 's/^Nmap scan report for //
    s/^\([^<b>][^<b>]*\) \([^<b>][^<b>]*\)/\1, \2/
    s/(\([0-2]*[0-9]*[0-9]\.[0-2]*[0-9]*[0-9]\.[0-2]*[0-9]*[0-9]\.[0-2]*[0-9]*[0-9]\))/\1/' /path/to/input

Again, watch the output and check if this is indeed what you want. Finally, if you are satisfied with the result, save it to a file:

Code:
sed 's/^Nmap scan report for //
    s/^\([^<b>][^<b>]*\) \([^<b>][^<b>]*\)/\1, \2/
    s/(\([0-2]*[0-9]*[0-9]\.[0-2]*[0-9]*[0-9]\.[0-2]*[0-9]*[0-9]\.[0-2]*[0-9]*[0-9]\))/\1/' /path/to/input > /path/to/output

I hope this helps.

bakunin

Last edited by bakunin; 02-18-2014 at 06:04 AM..
 
Login or Register to Ask a Question

Previous Thread | Next Thread

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. Shell Programming and Scripting

Help with sed/grep

Hi, I have a file with reoccurring patterns and I want extract the 3rd line after the match, then delete another pattern from that third line. For example the file is in the following format: Hello Name: Abc Number: 123 Hello Name: FQE Number: 543 This occurs more than 100... (4 Replies)
Discussion started by: wsn
4 Replies

3. Linux

sed and grep

I am stranded with a problem. Please solve. How will you remove blank lines from a file using sed and grep? ( blank line contains nothing or only white spaces). I run the below commands of sed and grep but grep isn't giving output as desired. Why? sed '/^*$/d' blank grep -v "^*$" blank... (3 Replies)
Discussion started by: ravisingh
3 Replies

4. Shell Programming and Scripting

sed/tr/grep help

So I have a html file with a bunch of words inside tags and I need to extract just the words, and I'm not sure exactly what the best way to do this is. The format is as follows: <tr> <td>word 1</td> <td>word 2</td> </tr> And all I want to extract is the 'word 2'. First I tried... (3 Replies)
Discussion started by: flightskoo
3 Replies

5. Shell Programming and Scripting

help with SED + GREP

HI all, i have a line in a file it contains Code: one;two_1_10;two_2_10;two_3_10;three~ now i need to get the output as Code: one;two_1_abc_10;two_2_abc_10;two_3_abc_10;three~ ( 1 should be replaced with 1_abc for two__abc_10 , and one more thing the number of occurances of... (6 Replies)
Discussion started by: 2001.arun
6 Replies

6. UNIX for Dummies Questions & Answers

sed or grep?

hello everybody! I have a html file which is not properly formatted meaning that the whole content is in one line. I want to to cut out certain parts of that file. Those parts are between ' #" ' and ' " ' and always start with ' sec_ ' and after the ' sec_ ' any number of characters and ' _... (2 Replies)
Discussion started by: MastaFue
2 Replies

7. UNIX for Dummies Questions & Answers

Grep or Sed

Hi All, I have created a bourne script that basically wants to split a file up in to different parts. I have this working if the file has all the information on different lines but if it doesn't then it doesn't work. i.e. If this is the file hello 12345 good bye 6789 I could grep all the... (5 Replies)
Discussion started by: jazz8146
5 Replies

8. Shell Programming and Scripting

using sed to grep

I have a file that contains many instances of double dollar signs. I want to use sed to get the first occurrence. for example, given the following data. #Beginning of file AB 34 $$ AB $$ AB 98 $$ I only want to pull out: AB 34 $$ (1 Reply)
Discussion started by: wxornot
1 Replies

9. UNIX for Dummies Questions & Answers

grep sed

OK, I am trying to become more familiar with grep and sed. I have a file that is storing some records. I am allowing a user to search for a keyword in the file with this: grep -i "$keyword" testFile|sed -n -e 's/^/\ /' -e 's/:/\ /gp' ... (15 Replies)
Discussion started by: ericelysia
15 Replies

10. UNIX for Dummies Questions & Answers

SED and it used with | and grep

I am really lost I don't know what this line does. Please help I'm very lost. Thanks in advance. cat CPROGRAMS.c |sed 's// /g'|tr ' ' '\012' |grep '' |sed 's/^*/ /' |grep '($'|sort -u|tr -d "("` (4 Replies)
Discussion started by: Lem2003
4 Replies
Login or Register to Ask a Question