200mg
200mg

Reputation: 531

Remove String in one text file from another text file

I have two text files. One has all servers on the domain (servers_all.txt) and the other has only the virtual servers (virtual_servers.txt). I want to get the difference between the two so I can find the physical servers. I have been tring compare-object to no avail

Compare-Object (gc servers_all.txt) (gc .\VIRTUAL_SERVERS.TXT) -IncludeEqual

Is there a way I can remove the servers listed in virtual_servers.txt from servers_all.txt.

Both txt files are formatted the same way with only the server names in a single column ie:

ServerA
ServerB
ServerC

Upvotes: 0

Views: 429

Answers (2)

TessellatingHeckler
TessellatingHeckler

Reputation: 29003

$all = 'a','b','c','d'
$virtual = 'b','c'

Compare-Object $all $virtual -PassThru

->

a
d

Upvotes: 0

Bacon Bits
Bacon Bits

Reputation: 32170

Compare-Object is somewhat obtuse (to put it mildly). I avoid it.

$VirtualServers = Get-Content .\VIRTUAL_SERVERS.TXT;
$NonVirtualServers = Get-Content servers_all.txt | Where-Object { $_ -notin $VirtualServers };

The only thing to beware of here is file formatting errors like leading or trailing whitespace. If you want to handle that, you could do something like:

$VirtualServers = Get-Content .\VIRTUAL_SERVERS.TXT | ForEach-Object { $_.Trim() };
$NonVirtualServers = Get-Content servers_all.txt | ForEach-Object { $_.Trim() } | Where-Object { $_ -notin $VirtualServers };

Upvotes: 2

Related Questions