2011-06-16 148 views
1

我有一个包含SQL Server数据库列表的文件。我想从文件中删除4个系统数据库[master,model,msdb,tempdb]。我怎样才能做到这一点?如何从文件中删除重复的文本?

Server1 
[DB1] 
[DB2] 
[DB3] 
[master] 
[model] 
[msdb] 
[tempdb] 
Server2 
[DB1] 
[DB2] 
[DB3] 
[master] 
[model] 
[msdb] 
[tempdb] 
Server3 
[DB1] 
[DB2] 
[DB3] 
[master] 
[model] 
[msdb] 
[tempdb] 

回答

3

一种选择是使用-notcontains

$system = "[master]","[model]","[msdb]","[tempdb]" 
$new_file = @(get-content db_list.txt | 
    where {$system -notcontains $_}) 
$new_file | out-file db_list.txt -force 
+0

谢谢mjolinor! – Animesh 2011-06-16 12:11:08

0

,如果你只是想去掉台词:如果你想删除整个块

grep -v -E '^\[(master|model|msdb|tempdb)\]' 

perl -0133 -ne 'if ($_ !~ /^(master|model|msdb|tempdb)/) { print "["; print substr($_, 0, -1) }' 
+2

尼斯为Unix-Y,但在PowerShell中不起作用。 – vonPryz 2011-06-16 11:31:04

1

枚举文件,并检查该项目不MATC一个正则表达式。这很像yi_H的grep -v示例作品。

# dbs is here an array, but anything enumerable works. 
$dbs = @("[DB1]", "[DB2]", "[DB3]", "[master]", "[model]", "[msdb]", "[tempdb]", "Server2", "[DB1]", "[DB2]", "[DB3]", "[master]", "[model]", "[msdb]", "[tempdb]", "Server3", "[DB1]", "[DB2]", "[DB3]", "[master]", "[model]", "[msdb]", "[tempdb]") 

$dbs | ? {!($_ -match "\[(master)|(model)|(msdb)|(tempdb)\]")} 
2
(Get-Content.\db.txt) | where {$_ -notmatch '^\[master|model|msdb|tempdb\]$'} | Out-File .\db.txt