Как я могу удалить повторяющийся текст из файла? - PullRequest
1 голос
/ 16 июня 2011

У меня есть файл со списком баз данных 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]

Ответы [ 4 ]

3 голосов
/ 16 июня 2011

Один из вариантов - использовать -не содержит

 $system = "[master]","[model]","[msdb]","[tempdb]"
 $new_file = @(get-content db_list.txt |
   where {$system -notcontains $_})
 $new_file | out-file db_list.txt -force
2 голосов
/ 16 июня 2011
(Get-Content.\db.txt) | where {$_ -notmatch '^\[master|model|msdb|tempdb\]$'} | Out-File .\db.txt
1 голос
/ 16 июня 2011

Перечислите файл и убедитесь, что элемент не соответствует регулярному выражению. Это очень похоже на пример работы grep -v в yi_H.

# 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)\]")}
0 голосов
/ 16 июня 2011

, если вы хотите удалить только строки:

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

, если вы хотите удалить весь блок:

perl -0133 -ne 'if ($_ !~ /^(master|model|msdb|tempdb)/) { print "["; print substr($_, 0, -1) }'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...