Solved

Delete Multiple Line using linux command

Posted on 2014-01-07
7
193 Views
Last Modified: 2014-11-18
Hi,

I have two .txt files which content email list ,
File one named : old.txt

That contains :
isbert@yahoo.com
laysod@gmail.com
gjebos@hotmail.com
sje2@admin2.com
mebes.dk@gmail.com
dojensu@ymail.com
ajs2u@hotmail.com

file two named : delete.txt
sje2@admin2.com
ajs2u@hotmail.com

What I need to ask if how can I delete the lines for old.txt using delete.txt pattern?
0
Comment
Question by:skywill
7 Comments
 
LVL 45

Expert Comment

by:Kent Olsen
ID: 39763052
Hi skywill,

You can use any of at least a half dozen utility programs (awk, sed, grep, etc.) to do this.  Join works well, too.

Try this:

 join -v1 -v2 < (sort old.txt) < (sort delete.txt)


Good Luck!
Kent
0
 

Author Comment

by:skywill
ID: 39763091
what I need is when I run the command , the old.txt will have only left these email :

isbert@yahoo.com
laysod@gmail.com
gjebos@hotmail.com
mebes.dk@gmail.com
dojensu@ymail.com

so the the result is sje2@admin2.com and ajs2u@hotmail.com deleted from old.txt

do ur command work ?
0
 
LVL 45

Assisted Solution

by:Kent Olsen
Kent Olsen earned 125 total points
ID: 39763106
Those commands will generate the results that you're looking for and write them to standard output.

Just redirect the output to the desired file.  You'll probably want to write the results to a temporary file, then copy that file back over old.txt

 join -v1 -v2 < (sort old.txt) < (sort delete.txt) > new.txt
 cp new.txt old.txt
0
 
LVL 38

Accepted Solution

by:
Gerwin Jansen, EE MVE earned 125 total points
ID: 39763137
grep -v -f delete.txt old.txt

(will use patterns from old.txt to find non-matching lines from delete.txt)

grep -v -f delete.txt old.txt  > new.txt

(new.txt will contain your filtered output)

grep -v -f delete.txt old.txt  > new.txt ; mv new.txt old.txt

(and rename new.txt to old.txt)
0
 
LVL 27

Expert Comment

by:skullnobrains
ID: 39835407
the proper use of join is :

$ sort old.txt > old.txt.sorted
$ sort delete.txt > delete.txt.sorted
$ join -a1 -v2 old.txt.sorted delete.txt.sorted
dojensu@ymail.com
gjebos@hotmail.com
isbert@yahoo.com
laysod@gmail.com
mebes.dk@gmail.com

---

this is much simpler and does not change the order of the addresses nor spend time sorting them

$ grep -v -f delete.txt old.txt
isbert@yahoo.com
laysod@gmail.com
gjebos@hotmail.com
mebes.dk@gmail.com
dojensu@ymail.com
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Windows Script Host (WSH) has been part of Windows since Windows NT4. Windows Script Host provides architecture for building dynamic scripts that consist of a core object model, scripting hosts, and scripting engines. The key components of Window…
In threads here at EE, each comment has a unique Identifier (ID). It is easy to get the full path for an ID via the right-click context menu. However, we often want to post a short link within a thread rather than the full link. This article shows a…
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…

726 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question