В Powershell: удаление строк из текстового файла, если он содержит набор слов, хранящихся в другом текстовом файле. - PullRequest
0 голосов
/ 19 февраля 2020

Я знаю:

Get-Content C:\new\temp_*.txt | Select-String -pattern "H|159" -notmatch | Out-File C:\new\newfile.txt

Но мне нужно извлечь -pattern из другого текстового файла, поскольку шаблоны имеют размер 300 Кб, поэтому их нельзя передать по трубопроводу.

Что такое измененная команда?

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Шаблон будет принимать массив шаблонов, которые также могут быть результатом Get-Content другого файла. Select-String испускает объекты, поэтому, если вы надеетесь, что совпадающие строки будут в его файле, это будет неправильно.

В этом случае он покажет имя файла, номер строки и совпавшую строку.

Чтобы получить только строки, попробуйте что-то вроде:

$Pattern = Get-Content <SomeFile.txt>
(Select-String -path C:\new\temp_*.txt -Pattern $pattern).Line | Out-File C:\new\newfile.txt
  • Создание переменной $Pattern в виде массива шаблонов, полученных из файла
  • Вместо В конвейере файлов для выбора строки используйте параметр -Path с шаблоном подстановочных знаков.
  • Затем создайте ссылку и передайте по конвейеру свойство line объектов сопоставления, а не передавайте сами объекты в файл.

Это приведет к тому, что в выходном файле будут присутствовать только совпадающие строки.

Дайте мне знать, если это поможет.

0 голосов
/ 19 февраля 2020

$ pattern = Get-Content fileWithRegexPattern.txt; Get-Content text.txt | Select-String -Pattern $ pattern

и передать вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...