С Новым годом! Форум программистов, компьютерный форум, киберфорум
Администрирование Windows
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.96/55: Рейтинг темы: голосов - 55, средняя оценка - 4.96
 Аватар для jkom-18rus
88 / 33 / 8
Регистрация: 26.02.2016
Сообщений: 326

Поиск определённой строки в выводе результата выполнения команды

21.12.2016, 09:48. Показов 11640. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Столкнулся с проблемой поиска строки, содержащей только числовое значение.

Выполняю команду, получаю результат (несколько строк) с текстовыми и числовыми значениями.
Из результата мне требуется лишь строка, содержащая число.

Кликните здесь для просмотра всего текста
Пример:
из результата
Changed database context to 'directum'.
98

(1 rows affected)
мне требуется выбрать "98"


В findstr есть ключ \d - любой цифровой символ, только не понял я как он работает.
В powershell есть select-string, но тоже не смог разобраться, как это работает.

Рассмотрю любые варианты реализации задачи.
Заранее всем спасибо за помощь.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.12.2016, 09:48
Ответы с готовыми решениями:

Кодировка при выводе результата выполнения команды в текстовый файл
растолкуйте как вывести данные из cmd в текстовый файл в нормальной кодировке. если делать просто: d:\>ipconfig>info.txt то в...

После выполнения определённой команды не выполняются последующие команды
Объясните, пожалуйста, почему может останавливаться выполнение второй и далее комманд? cd C:\Users\alex_iv\Desktop\test_node\ node...

Обработка результата выполнения команды find
Здравствуйте! Сейчас через команду find ищу в файле количество строк, нужно чтоб при количестве строк 0 выполнялось одно действие при...

29
Любознательный
 Аватар для YuS_2
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,210
21.12.2016, 12:10
Цитата Сообщение от jkom-18rus Посмотреть сообщение
В findstr есть ключ \d - любой цифровой символ, только не понял я как он работает.
Нет там такого метасимвола (проверить легко: findstr /?), регэкспы в findstr очень своеобразные:
Windows Batch file
1
2
3
@echo off
findstr /rc:"^[0-9][0-9]*$" test.txt
pause
Или на powershell:
PowerShell
1
gc test.txt|where{$_ -match '^\d+$'}
0
 Аватар для jkom-18rus
88 / 33 / 8
Регистрация: 26.02.2016
Сообщений: 326
21.12.2016, 12:46  [ТС]
Цитата Сообщение от YuS_2 Посмотреть сообщение
Нет там такого метасимвола
Брал информацию отсюда.

Остальное содержание Вашего поста относится к проверке или к помощи в решении проблемы?
0
Любознательный
 Аватар для YuS_2
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,210
21.12.2016, 13:51
Цитата Сообщение от jkom-18rus Посмотреть сообщение
Брал информацию
Если на клетке слона прочтешь надпись: буйвол, - не верь глазам своим...

Цитата Сообщение от jkom-18rus Посмотреть сообщение
Остальное содержание
Вместо вопроса, можно запустить пакетный сценарий или скрипт powershell и посмотреть, что получится...
test.txt - файл, который содержит проверяемый массив текста.
0
 Аватар для jkom-18rus
88 / 33 / 8
Регистрация: 26.02.2016
Сообщений: 326
21.12.2016, 14:08  [ТС]
Не понимаю. Не силён в программировании на cmd и powershell.

Можете на примере показать? Типа "команда" | поиск строки с числом -> вывод только числа.

Дополнительно. Может, есть вариант отсеивать строки? Например, оставлять только первую, остальные удалять. Так, чтобы результат был - одна строка, без символов переноса и прочей "служебной ерунды".
0
Любознательный
 Аватар для YuS_2
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,210
21.12.2016, 15:09
Цитата Сообщение от jkom-18rus Посмотреть сообщение
получаю результат (несколько строк) с текстовыми и числовыми значениями.
Из результата мне требуется лишь строка, содержащая число.
Вот то, что требовалось - правильно понимаю?
Ну и поместите свой результат в файл test.txt или измените имя файла в сценариях на тот, в котором у Вас результат и запустите пакетный сценарий, либо сценарий powershell.

назовите пакетник как хочется, например, run.bat, а сценарий powershell script.ps1

Если требуется вывод в другой файл, то:
Windows Batch file
1
2
3
@echo off
findstr /rc:"^[0-9][0-9]*$" test.txt >out_bat.txt
pause
PowerShell
1
gc test.txt|where{$_ -match '^\d+$'} >out_ps.txt
Добавлено через 6 минут
Цитата Сообщение от jkom-18rus Посмотреть сообщение
Так, чтобы результат был - одна строка, без символов переноса и прочей "служебной ерунды".
Лучше приведите пример:
1. Исходный текст.
2. Текст который должен получиться в результате.

И сформулируйте точнее, что же хочется получить в итоге, тогда можно будет о чем-то говорить.
0
 Аватар для jkom-18rus
88 / 33 / 8
Регистрация: 26.02.2016
Сообщений: 326
22.12.2016, 07:15  [ТС]
Цитата Сообщение от YuS_2 Посмотреть сообщение
Лучше приведите пример:
1. Исходный текст.
2. Текст который должен получиться в результате.
В первом посте под спойлером спрятал.

В Ваших кодах будут отслеживаться только цифры?

И сформулируйте точнее, что же хочется получить в итоге, тогда можно будет о чем-то говорить.
Получаю результат команды - много строк. Мне нужна лишь одна, в которой содержатся цифры, числа.
Эта строка в большинстве случаев первая. Поэтому можно ли реализовать как-то обрезку результата? То есть первую строку разрешить, а всё остальное обрезать?
0
Любознательный
 Аватар для YuS_2
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,210
22.12.2016, 07:34
Цитата Сообщение от jkom-18rus Посмотреть сообщение
В первом посте под спойлером спрятал.
А вы откройте тот спойлер и спросите себя - это точно то, что вам нужно получить...
0
 Аватар для jkom-18rus
88 / 33 / 8
Регистрация: 26.02.2016
Сообщений: 326
22.12.2016, 07:56  [ТС]
Цитата Сообщение от YuS_2 Посмотреть сообщение
А вы откройте тот спойлер и спросите себя - это точно то, что вам нужно получить...
Из всего, что там есть, мне нужна строка с 98.

Вариант с выборкой только цифр провалился. По findstr /rc:[0-9] он находит две строки.
Значит нужен вариант по выборке только первой строки.
0
Любознательный
 Аватар для YuS_2
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,210
22.12.2016, 08:17
Цитата Сообщение от jkom-18rus Посмотреть сообщение
он находит две строки.
Какие две строки?
Ещё раз:
Цитата Сообщение от YuS_2 Посмотреть сообщение
Лучше приведите пример:
1. Исходный текст.
2. Текст который должен получиться в результате.
Не вижу то, что должно быть под первым действием. Где образец текста?

Вот Вам анекдот:
Жена отправляет мужа-программиста в магазин: - Купи батон хлеба, если
будут яйца - возьми десяток.
Муж возвращается из магазина с десятью батонами.
- Ты зачем столько хлеба купил?
- Так ведь яйца были...
Это может быть и смешно, но программирование - это такая же точная наука, как и математика. Поэтому, чтобы не получать десять батонов (в Вашем случае две строки), составьте правильно условие и приведите образец текста, на котором вы проверяете сценарий.
0
 Аватар для jkom-18rus
88 / 33 / 8
Регистрация: 26.02.2016
Сообщений: 326
22.12.2016, 08:28  [ТС]
Ничего другого я не приведу. Не понимаю, скорее всего, что ещё требуется.

Вот то, что я получаю:
----
98

(1 rows affected)
----

После обработки, я хочу получить "98".
В последней строке есть цифра "1", поэтому findstr /rc:[0-9] её также находит.
Мне надо получить "trim(0-я строка)", если говорить о программировании.
0
Любознательный
 Аватар для YuS_2
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,210
22.12.2016, 09:07
Цитата Сообщение от jkom-18rus Посмотреть сообщение
После обработки, я хочу получить "98".
Ок.
Цитата Сообщение от jkom-18rus Посмотреть сообщение
В последней строке есть цифра "1", поэтому findstr /rc:[0-9] её также находит
Поднимите вверх глаза и посмотрите, это похоже на тот сценарий, который приводил я? Нет? Тогда проверьте, всё же, именно мой сценарий...
0
 Аватар для jkom-18rus
88 / 33 / 8
Регистрация: 26.02.2016
Сообщений: 326
22.12.2016, 09:22  [ТС]
Цитата Сообщение от YuS_2 Посмотреть сообщение
Поднимите вверх глаза и посмотрите, это похоже на тот сценарий, который приводил я? Нет? Тогда проверьте, всё же, именно мой сценарий...
Подставил Ваше решение - findstr /rc:"^[0-9][0-9]*$"
В результате не получил ничего. Пусто.
0
Любознательный
 Аватар для YuS_2
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,210
22.12.2016, 09:58
Цитата Сообщение от jkom-18rus Посмотреть сообщение
Подставил Ваше решение
Это не мое решение...
Вот мое:
Файл test.txt, составленный по Вашим данным:
Code
1
2
3
4
Changed database context to 'directum'.
98
 
(1 rows affected)
Пакетный сценарий, расположенный рядом с файлом test.txt, run.bat:
Windows Batch file
1
2
@echo off
findstr /rc:"^[0-9][0-9]*$" "test.txt" >out_bat.txt
В результате получите файл out_bat.txt, содержащий одну строку:
Code
1
98
Запускайте, проверяйте, думайте.
0
 Аватар для jkom-18rus
88 / 33 / 8
Регистрация: 26.02.2016
Сообщений: 326
22.12.2016, 10:33  [ТС]
Строки 2, вторая пустая.
Хорошо, как это работает? Почему просто findstr /rc:"^[0-9][0-9]*$" выдаёт пустоту?
Не хочу я текстовыми файлами ещё всё нагружать. Мне бы все операции выполнять в консоли.

Вариант с отсеиванием всех строк, кроме нулевой всё же есть?

Добавлено через 21 минуту
Я правильно понимаю, что [0-9][0-9] - это отбор по типу [цифра][цифра], т.е. только двузначное число? И это не сработает для однозначного, для трёхзначного?
0
Любознательный
 Аватар для YuS_2
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,210
22.12.2016, 11:23
Цитата Сообщение от jkom-18rus Посмотреть сообщение
Почему просто findstr /rc:"^[0-9][0-9]*$" выдаёт пустоту?
Потому, что ничто не возникает ниоткуда... для того, чтобы найти с помощью findstr данные, необходимо эти данные где-то взять.
Цитата Сообщение от jkom-18rus Посмотреть сообщение
Не хочу я текстовыми файлами ещё всё нагружать.
А я не хочу заниматься телепатией, у меня эта часть мозга атрофирована полностью.

Цитата Сообщение от jkom-18rus Посмотреть сообщение
Мне бы все операции выполнять в консоли.
Я ведь Вам написал:
Цитата Сообщение от YuS_2 Посмотреть сообщение
сформулируйте точнее, что же хочется получить в итоге, тогда можно будет о чем-то говорить.
Если вы ничего не пишите о том, откуда берутся данные то, что вы ожидаете увидеть в решении?

Цитата Сообщение от jkom-18rus Посмотреть сообщение
Вариант с отсеиванием всех строк, кроме нулевой всё же есть?
Да вариантов насочинять - плевое дело. Тут главное увидеть, что же всё таки требуется получить на выходе и что подаётся на вход... в общем, гораздо более полное описание задачи.

Цитата Сообщение от jkom-18rus Посмотреть сообщение
правильно понимаю, что [0-9][0-9] - это отбор по типу [цифра][цифра], т.е. только двузначное число?
Если буквально (а регэкспы по-другому и не читаются), то да, Вы привели шаблон двузначного числа.

Цитата Сообщение от jkom-18rus Посмотреть сообщение
И это не сработает для однозначного, для трёхзначного?
А это уже зависит от шаблона. В моем шаблоне - сработает, в Вашем - нет.
0
 Аватар для jkom-18rus
88 / 33 / 8
Регистрация: 26.02.2016
Сообщений: 326
22.12.2016, 12:08  [ТС]
Цитата Сообщение от YuS_2 Посмотреть сообщение
Потому, что ничто не возникает ниоткуда... для того, чтобы найти с помощью findstr данные, необходимо эти данные где-то взять.
Дак они и берутся. Исходные данные - это результат выполнения предыдущей команды.
Писал я выше, что в командной строке пишу следующее: команда-0 | findstr /%аргументы%. Таким образом findstr работает с выводом команды-0 и на финальном выходе получаем вывод findstr, а точнее вывод команды-0, обработанный findstr.

Вся команда целиком следующая:
Windows Batch file
1
sqlcmd -h-1 -U sa -P "parol" -S "server" -Q "select count(*) from MBUser users where users.UserType = 'П' and users.UserStatus = 'А' and users.UserCategory = 'О'" | findstr /rc:"^[0-9][0-9]*$"
Мне кроме первой строки команды-0 больше ничего не надо (приведённый пример). Поэтому задача именно в том, чтобы в финальный вывод попала первая строка (строка с числом)
0
Любознательный
 Аватар для YuS_2
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,210
22.12.2016, 13:14
Цитата Сообщение от jkom-18rus Посмотреть сообщение
Вся команда целиком следующая
А отдельно, без передачи по конвейеру, в таком вот виде, как Вы показали, эта команда в консоль, что-нибудь выводит?
Если да и по конвейеру ничего не передаётся, то попробуйте заключить её в скобки:
Windows Batch file
1
2
(sqlcmd -h-1 -U sa -P "parol" -S "server" -Q "select count(*) from MBUser users where users.UserType = 'П' and users.UserStatus = 'А' and users.UserCategory = 'О'") | findstr /rc:"^[0-9][0-9]*$"
pause
Добавлено через 1 минуту
Если фильтр будет работать, тогда прикрутить вывод только одной, первой строки, не составит проблемы.
0
 Аватар для jkom-18rus
88 / 33 / 8
Регистрация: 26.02.2016
Сообщений: 326
22.12.2016, 13:42  [ТС]
Цитата Сообщение от YuS_2 Посмотреть сообщение
А отдельно, без передачи по конвейеру, в таком вот виде, как Вы показали, эта команда в консоль, что-нибудь выводит?
Changed database context to 'directum'.
98

(1 rows affected)
0
 Аватар для jkom-18rus
88 / 33 / 8
Регистрация: 26.02.2016
Сообщений: 326
22.12.2016, 13:48  [ТС]
98

(1 rows affected

Ошибся. 98 идёт первой строкой
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.12.2016, 13:48
Помогаю со студенческими работами здесь

Вывод результата выполнения команды в два файла
Всем привет, подскажите пожалуйста как результат направить в 2 файла В первый запись шла > 1.txt(перезаписывался) Во второй >>...

Вывод в правильной кодировке в файл результата выполнения команды
понимаю что как и почему. из консоли получаем текстовик в кодировке OEM 866. а нужна windows 1251 выход конечно перекодировать в...

Вывод даты и результата выполнения команды pathping в файл
Добрый день! Нужен батник, который выводит в файл дату/время плюс результат выполнения команды pathping -n yandex.ru С выводом даты...

Запись результата выполнения команды IPCONFIG в текстовый файл
я создаю батник так ipconfig/all> 1.txt Вопрос в следующем как задать кодировку что бы записывались русские символы.

Автоматическая подстановка вывода результата выполнения одной команды в другую
Доброго времени суток! Совсем недавно начал работать под Windows, поэтому прошу сильно не пинать если вопрос вдруг откровенно глупый. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru