Как сделать это на PowerShell?
Всем привет! Нужна помощь в переписывании однострочного скрипта. :)
#!/bin/bash
grep -vwE "ДнейОтсрочки" "Doc_2020-01.xml" > 01_new.xml
Этот скрипт ищет в файле Doc_2020-01.xml строку "ДнейОтсрочки" и удаляет её (удаляется полностью строка файла, а не только искомое вхождение).
Результат записывается (выводится) в файл 01_new.xml Особенность: искомая строка и xml-файл в кодировке UTF-8
Ответы (2 шт):
Примерно так будет выглядеть команда:
Select-String -NotMatch 'ДнейОтсрочки' 'E:\Doc_2020-01.xml' | Set-Content 'e:\01_new.xml'
Select-String - аналог grep
-NoMatch - аналог -v
Set-Content записывает stdout в файл
Да почти также, только вместо grep Select-String. Основное отличие в том, что пайпы в Powershell передают объекты, а не просто байты, и по-умолчанию Select-String выдает объекты класса Microsoft.PowerShell.Commands.MatchInfo. Чтобы он начал выдавать просто строчки необходимо добавить параметр -Raw
Select-String -NotMatch -Pattern "ДнейОтсрочки" -Path "./Doc_2020-01.xml" -Raw > "./01_new.xml"
В версиях Powershell до 7 параметра -Raw не было, и там было бы необходимо дополнительно обработать выхлоп, оставив только строки:
Select-String -NotMatch -Pattern "ДнейОтсрочки" -Path "./Doc_2020-01.xml" | ForEach-Object { $_.Line } > "./01_new.xml"