Фильтровать только цифры (0-9) в выводе в классической командной строке Windows

Фильтровать только цифры (0-9) в выводе в классической командной строке Windows

У меня есть текст, например:

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.
  • для /ф- Циклическая команда по результатам другой команды.
  • тип- Отображение содержимого одного или нескольких текстовых файлов.

Связанный контент