Удалить специальные символы из текстового файла в Windows - PullRequest
1 голос
/ 24 апреля 2020

Я хочу вывести текст из текстового файла в сценарии Windows, как вы можете в Linux с grep:

grep -ve ^# -ve '^;' -ve ^$ /name of file.

У меня не было большого успеха в поиске решения. Я пытаюсь использовать Powershell с небольшим опытом его использования.

Ответы [ 3 ]

1 голос
/ 24 апреля 2020

Используйте Select-String вместо grep:

Select-String -Path 'path/to/file' -Pattern '^[#;]|^$' -NotMatch 

Select-String выведет объект Match, если вы просто хотите сопоставить строки, возьмите свойство Line:

Select-String ... |Select -Expand Line

Начиная с PowerShell 7.0, вы также можете использовать переключатель -Raw, чтобы Select-String возвращал только совпадающие строки и ничего больше:

Select-String ... -Raw
0 голосов
/ 25 апреля 2020

Это то, что я использовал для вывода, я был после; get-childitem zabbix_agentd.conf | select-string -pattern '^ [#;] | ^ $' -notmatch

Это то, что я делал после всех закомментированных строк и пробелов. zabbix_agentd.conf: 24: LogFile = C: \ Program Files \ Zabbix Agent \ zabbix_agentd.log zabbix_agentd.conf: 88: Сервер = 10.0.0.22 zabbix_agentd.conf: 130: ServerActive = 10.0.0.22 zabbix_agentd.f: Имя хоста = RED-DOUG zabbix_agentd.conf: 257: Включить = C: \ Program Files \ Zabbix Agent \ zabbix_agentd.conf.d \

Спасибо за помощь, Даг

0 голосов
/ 24 апреля 2020

Это близко. Вы можете иметь массив шаблонов, разделенных запятыми. Как и в bash, точка с запятой должна быть заключена в кавычки, потому что это означает «конец утверждения» в powershell. Команда избегает строк, которые начинаются с "#", ";" или являются пустыми.

'# comment',
'; semicolon',
'',
'one',
'two',
'three' | select-string ^#, '^;', ^$ -notmatch

one
two
three

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