2013-09-14 3 views
2

Я пытаюсь выяснить, как использовать powershell для поиска и удаления строк без определенного шаблона строки в наборе файлов. Например, у меня есть следующий текстовый файл:найти и удалить строки без шаблона строки в текстовых файлах

111111
22x222
333333
44x444

Это должна быть превращена в:

22x222
44x444

при условии, что строка шаблон «х» не в какой-либо из другие линии.

Как я могу отправить такую ​​команду в powershell для обработки кучи текстовых файлов?

спасибо.

+1

Пробел перед некоторыми линиями преднамеренно? –

ответ

3
dir | foreach { $out = cat $_ | select-string x; $out | set-content $_ } 

Команда dir перечисляет файлы в текущем каталоге; foreach проходит через каждый файл; cat считывает файл и трубы в select-string; select-string находит строки, содержащие конкретный шаблон, который в данном случае является «x»; результат select-string хранится в $out; и, наконец, $out записывается в тот же файл с set-content.

Нам нужна временная переменная $out, потому что вы не можете читать и писать один и тот же файл одновременно.

+0

большое спасибо. я проверю это в понедельник. – Niner

+0

Что делать, если мне нужно обработать «x» или «y» или «z»? Как сформировать строку выбора, чтобы взять все это как «или»? – Niner

+2

@Niner Это регулярное выражение, поэтому вы можете сделать 'select-string 'x | y | z" '. Подробнее см. Http://technet.microsoft.com/en-us/library/dd315294.aspx. –

2

Это обработает все файлы txt из рабочего каталога. Каждое содержимое файла проверяется, и только строки, для которых есть «x», разрешены. Результат записывается обратно в файл.

Get-ChildItem *.txt | ForEach-Object{ 
    $content = Get-Content $_.FullName | Where-Object {$_ -match 'x'} 
    $content | Out-File $_.FullName 
} 
Смежные вопросы