%20%D0%B2%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B5%20%D0%B2%20%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D0%B9%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B5%20Windows.png)
У меня есть текст, например:
cd123aaq54
и я хотел бы разделить только числа в другом файле, чтобы я мог иметь
12354
на выходе.
Я пробовал много команд, например:
Get-Content text.txt | Select-String -Pattern '[0-9]'
В Linux это гораздо проще, просто:
grep -o '[0-9][0-9]*' text >numbers
Как это сделать в cmd
оболочке Windows?
решение1
Как удалить символы Alpha из входного файла, оставив только цифры?
Ниже приведены два решения:
- PowerShell
- Пакетный файл Windows
Решение PowerShell
Используйте следующую команду:
Get-Content input.txt | ForEach-Object {$_ -Replace "[^0-9]", ""} > output.txt
Примечания:
input.txt
содержит текст для фильтрации.output.txt
содержит отфильтрованный текстВсе нецифровые символы (не только буквенные) будут удалены.
Пример:
PS F:\test> type .\input.txt
cd123aaq54
zyx456abc321
PS F:\test> Get-Content input.txt | ForEach-Object {$_ -Replace "[^0-9]", ""} > output.txt
PS F:\test> type .\output.txt
12354
456321
PS F:\test>
Пакетное решение для Windows
Используйте следующий пакетный файл (RemoveAlpha.cmd):
@echo off
setlocal enabledelayedexpansion
set _alpha=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
rem read input file line by line
for /f "usebackq tokens=*" %%i in (`type %1`) do (
rem strip alpha characters by using them as delimeters
for /f "tokens=1,2 delims=%_alpha%" %%j in ("%%i") do (
rem write stripped text to output file
echo %%j%%k>>%2
)
)
endlocal
Примечания:
Вышеприведенное предполагает, что во входном файле нет специальных символов (
!@#$%^&*()
...) (они не будут удалены).«Хитрость» заключается в использовании строки символов Alpha в качестве разделителей для второй
for
команды.
Использование:
RemoveAlpha input output
input
: Путь к входному файлу, содержащему текст для фильтрации.output
: Путь к выходному файлу, содержащему скопированный текст фильтра.
Пример:
F:\test>RemoveAlpha input.txt output.txt
F:\test>type input.txt
cd123aaq54
zyx456abc321
F:\test>type output.txt
12354
456321
Дальнейшее чтение
- Индекс AZ командной строки Windows CMD- Отличный справочник по всем вопросам, связанным с командной строкой Windows.
- для /ф- Циклическая команда по результатам другой команды.
- тип- Отображение содержимого одного или нескольких текстовых файлов.