sed/awk : how to delete lines based on IP pattern ?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting sed/awk : how to delete lines based on IP pattern ?
# 1  
Old 10-17-2011
sed/awk : how to delete lines based on IP pattern ?

Hi,

I would like to delete lines in /etc/hosts on few workstations, basically I want to delete all the lines for a list of machines like this :

Code:
for HOST in $(cat stations.lst |uniq)
do
# echo -n "$HOST"
  if ping -c 1 $HOST  > /dev/null 2>&1
  then
      HOSTNAME_val=`rsh  $HOST "sed whatever /etc/hosts"`
      val1=`echo $HOSTNAME_val` 
    echo $val1
      else 
       echo "$HOST ; not responding"
  fi
done

"whatever" means "all the lines that contain 152.15.x.y, 152.9.x.y, 152.19.x.y and 44.33.x.y"

I need help for the sed part.
I was thinking of something like
Code:
sed '/152.15./d' /etc/hosts

but I don't know how to put my four patterns on the same line (or even if is it possible).

Thanks for your help
# 2  
Old 10-17-2011
Here is one way:
Code:
sed '/152.15.x.y/d;/152.9.x.y/d;/152.19.x.y/d;/44.33.x.y/d' /etc/hosts

This User Gave Thanks to Shell_Life For This Post:
# 3  
Old 10-17-2011
Once you know the sed command works as expected, you can use the -i option to replace the file you just edited.

Also, Shell_Life's example makes one big mistake: using unescaped periods (.) to represent the dot in an IP address. That can lead to big problems. Make sure you escape all periods like this:

Code:
sed -i '/152\.15\.3\.4/d;'

Another "gotcha" with the above example is that it will also nail ip addresses like "152.15.3.42". Since that's probably not what you want, do this:
Code:
sed -i '/^152\.15\.3\.4[\t ]/d;'

This makes sure that the 4 precedes a tab or space.
This User Gave Thanks to otheus For This Post:
# 4  
Old 10-18-2011
Thanks to you two

I will try this tomorrow and I'll let you know if I've succeded doing what I want Smilie

---------- Post updated 18-10-11 at 10:46 AM ---------- Previous update was 17-10-11 at 06:56 PM ----------

Hello again

Here is what I've done :

Code:
for HOST in $(cat stations.lst | uniq)
do
  # echo -n "$HOST"
  if ping -c 1 $HOST > /dev/null 2>&1
  then
    HOSTNAME_val=`rsh  $HOST "cp /etc/hosts /etc/hosts.dirty ; sed '/152\.15\./d;/152\.9\./d;/152\.19\./d;/44\.33\./d' /etc/hosts > /etc/hosts.clean ; mv /etc/hosts.clean /etc/hosts"`
    val1=`echo $HOSTNAME_val` 
    echo $val1
  else 
    echo "$HOST ; not responding"
  fi
done

The reason why I did not use the -i option is because many of the workstations are HP-UX and sed does not recognize de -i option on this system...

It's working great, thanks !
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Delete lines based on pattern match

BASH in Solaris 10 I have a log file like below. Whenever the pattern ORA-39083 is encountered, I want to delete the line which has this pattern and 3 lines below it. $ cat someLogfile.txt ORA-39083: Object type OBJECT_GRANT failed to create with error: ORA-01917: user or role 'CMPA' does... (4 Replies)
Discussion started by: kraljic
4 Replies

2. Shell Programming and Scripting

sed search pattern and delete lines

Hello, i have a question. My problem is that i have a file like: TEST JOHN ADAM MICHAEL SEBASTIAN ANDY i want find for MICHAEL and want delete lines like this: TEST (4 Replies)
Discussion started by: eightball
4 Replies

3. Shell Programming and Scripting

Sed delete blank lines upto first pattern match

Hi Im trying to do the following in sed. I want to delete any blank line at the start of a file until it matches a pattern and then stops. for example: Input output: I have got it to work within a range of two patterns with the following: sed '/1/,/pattern/{/^]*$/d}' The... (2 Replies)
Discussion started by: duonut
2 Replies

4. Shell Programming and Scripting

Sed/awk to delete single lines that aren't touching other lines

Hello, I'm trying to figure out how to use sed or awk to delete single lines in a file. By single, I mean lines that are not touching any other lines (just one line with white space above and below). Example: one two three four five six seven eight I want it to look like: (6 Replies)
Discussion started by: slimjbe
6 Replies

5. UNIX for Dummies Questions & Answers

[Solved] deleting pattern based lines in sed

HI, My input file contains below data: DFHDR 12345110 1,200 2,-100 1,100 2,123 12345110 1,300 2,200 DFTLR In the above data, the first line and last lines should be remove as well as the lines in which contains 110 as position(6,7,8 position) should also be removed, How we... (0 Replies)
Discussion started by: pandeesh
0 Replies

6. Shell Programming and Scripting

sed pattern to delete lines containing a pattern, except the first occurance

Hello sed gurus. I am using ksh on Sun and have a file created by concatenating several other files. All files contain header rows. I just need to keep the first occurrence and remove all other header rows. header for file 1111 2222 3333 header for file 1111 2222 3333 header for file... (8 Replies)
Discussion started by: gary_w
8 Replies

7. Shell Programming and Scripting

Sed or awk : pattern selection based on special characters

Hello All, I am here again scratching my head on pattern selection with special characters. I have a large file having around 200 entries and i have to select a single line based on a pattern. I am able to do that: Code: cat mytest.txt | awk -F: '/myregex/ { print $2}' ... (6 Replies)
Discussion started by: usha rao
6 Replies

8. Shell Programming and Scripting

copy, then delete lines in file with sed using a pattern

I need to copy lines to a new file from files with sed using a pattern in char postions 1-3. Then after the copy, I need to delete those same lines from the input files. For example, string "ABC" in pos 1-3 (6 Replies)
Discussion started by: laksjfhoius9123
6 Replies

9. Shell Programming and Scripting

sed delete pattern skipping first n lines of file.

I have files of more than 10K lines that I need to delete lines that contain a pattern, but I want to keep the first few lines intact. Can this be done with sed? (7 Replies)
Discussion started by: tkg
7 Replies

10. Shell Programming and Scripting

SED: match pattern & delete matched lines

Hi all, I have the following data in a file x.csv: > ,this is some text here > ,,,,,,,,,,,,,,,,2006/11/16,0.23 > ,,,,,,,,,,,,,,,,2006/12/16,0.88 < ,,,,,,,,,,,,,,,,this shouldnt be deleted I need to use SED to match anything with a > in the line and delete that line, can someone help... (7 Replies)
Discussion started by: not4google
7 Replies
Login or Register to Ask a Question