I have a text file :
192.168.47.100 computer 192.168.47.101 phone 192.168.47.1 computer3 192.168.47.50 computer2
and I want to delete 192.168.47.1
line
I tried
while read line do IPTemp="$line" ex -s +"g/$IPTemp/d" -cwq $1 done < IPLib.txt
but output is :
192.168.47.50 computer 3
I tried sed 's/192.168.47.1//g'
but again output is :
00 computer 01 phone computer3 192.168.47.50 computer2
I searched on google but but I am not able to find the right one.
Advertisement
Answer
The problem is that your pattern matches 3 lines in your data. You need to end it with $
. Also, if you use sed
‘s replace (s/
) you end up with empty lines. Use delete:
$ sed '/192.168.47.1$/d' file 192.168.47.100 192.168.47.101 192.168.47.50
In awk:
$ awk '!/192.168.47.1$/' file 192.168.47.100 192.168.47.101 192.168.47.50
another in awk where the whole first column is compared to a string, not using regex (thanks @Kent for pointing out):
$ awk '$1!="192.168.47.1"' file 192.168.47.100 192.168.47.101 192.168.47.50
and using grep
:
$ grep -v 192.168.47.1$ file 192.168.47.100 192.168.47.101 192.168.47.50
Edit: Apparently you changed the data. Now you need to end the pattern with a space:
$ sed '/192.168.47.1 /d' file2 192.168.47.100 computer 192.168.47.101 phone 192.168.47.50 computer2
and in awk:
$ awk '!/192.168.47.1 /' file2 192.168.47.100 computer 192.168.47.101 phone 192.168.47.50 computer2
and grep
:
$ grep -v 192.168.47.1 file2 192.168.47.100 computer 192.168.47.101 phone 192.168.47.50 computer2