![Использование PowerShell для очистки текстового файла](https://rvso.com/image/668805/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20PowerShell%20%D0%B4%D0%BB%D1%8F%20%D0%BE%D1%87%D0%B8%D1%81%D1%82%D0%BA%D0%B8%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B0.png)
Борюсь с этим и думаю, может ли кто-то помочь. У меня есть большой текстовый файл, в котором есть дополнительные данные, которые я хочу удалить. Вот пример входного файла:
Text In Page - 1
S
Dept
l<m RKB)
"1915
slightly 234234
"sil dsf 56
"gr
gl
1920 100
1925 100
1930 100 Cls
"1935 100 Cl
Text In Page - 2
l<m RKB)
"1915
slightly
"sil
"gr
glauc
1920 100
1925 100
1930 100 Cls
"1935 100 Cl
Я хочу удалить следующее:
- Любые пустые строки
- Любой " в начале строк
- Любые строки, начинающиеся с буквы AZ, az
Итак, в приведенном выше примере у меня осталось бы
1915
1920 100
1925 100
1930 100 Cls
1935 100 Cl
1915
1920 100
1925 100
1930 100 Cls
1935 100 Cl
решение1
Я думаю:
(gc D:\test.txt) -replace '^"' | sls '\S' | sls -NotMatch '^[A-Za-z]' | sc out.txt
Что делает:
- получить строки файла, и если первый символ — кавычка, заменить его ничем
- выбрать строки, которые соответствуют условию «не пробел» (т.е. пустые строки отфильтровываются)
- выберите строки, которые не начинаются с A-Za-z
- записывает результаты в out.txt
Есть разные способы написать длинную версию в зависимости от того, насколько вам нравится связывать вещи в цепочку с конвейером или работать с переменными снова и снова, но она делает следующее:
$lines = Get-Content D:\test.txt
$lines = $lines -replace '^"'
$lines = $lines | Select-String '\S'
$lines = $lines | Select-String -NotMatch '^[A-Za-z]'
$lines | Set-Content out.txt