Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
10529 / 5491 / 863
Регистрация: 07.04.2013
Сообщений: 15,661
1

Регулярка findstr отрабатывает на одном файле, но не отрабатывает на другом

06.01.2018, 12:07. Просмотров 2429. Ответов 18
Метки нет (Все метки)

Приветствую !

Сижу, ругаюсь матом в голос потому, что регулярка срабатывает на одном текстовом файле но упорно игнорирует другой.
А стало быть я жестко туплю где то.
Пример:
Код
type lyrics.txt | findstr /r /c:"^I .*and$"
type lyrics.txt | findstr /r /c:"^I.*y$"
type lyrics.txt | findstr /r /c:".*ful$"
Результат:
Код
D:\Desktop>type lyrics.txt | findstr /r /c:"^I .*and$"
I only know they tell me that love is grand, and

D:\Desktop>type lyrics.txt | findstr /r /c:"^I.*y$"
It's wonderful, so they say

D:\Desktop>type lyrics.txt | findstr /r /c:".*ful$"
They say that falling in love is wonderful
The thing that's known as romance is wonderful
Все, как и ожидалось со всеми примерами.

А теперь жесть:
Код
D:\Desktop>type debug.txt | findstr /r /c:"^Microsoft.*"
Microsoft (R) Windows Debugger Version 10.0.10586.567 AMD64

D:\Desktop>type debug.txt | findstr /r /c:".*AMD64$"

D:\Desktop>type debug.txt | findstr /r /c:"$.*AMD64"

D:\Desktop>type debug.txt | findstr /r /i /c:"$.*AMD64"

D:\Desktop>type debug.txt | findstr /r /i /c:".*AMD64$"

D:\Desktop>type debug.txt | findstr /r /c:"^M.*"
Microsoft (R) Windows Debugger Version 10.0.10586.567 AMD64
Mini Kernel Dump File: Only registers and stack trace are available
Machine Name:
Module name            Error
MODULE_NAME: nt_wrong_symbols

D:\Desktop>type debug.txt | findstr /r /i /c:".*e$"

D:\Desktop>
То-есть начало строк он понимает, а концы строк ни в какую. Пробовал на разных строках
И в файле lyrics.txt ему, значит, все нравится, а в файле debug.txt нет.
И да, кодировки и окончания у файлов одинаковые.


А затеял все это для того, чтобы избавиться от такого вот безобразия из debug.txt
Код
*************************************************************************
***                                                                   ***
***    Either you specified an unqualified symbol, or your debugger   ***
А именно удалить все строки вида ****~**** и *** ~ ***

По идее это все прекрасно должно урезаться вот таким вот образом (три звезды, три пробела, любые символы в любом количестве, три пробела, три звезды):
Код
type debug.txt | findstr /v /r /c"^\*\*\*   .*   \*\*\*$"
А на выходе вообще ловлю
Код
D:\Desktop>type debug.txt | findstr /v /r /c"^\*\*\*   .*   \*\*\*$"
FINDSTR: /c пропускается
FINDSTR: /^ пропускается
FINDSTR: /\ пропускается
FINDSTR: /* пропускается
FINDSTR: /\ пропускается
FINDSTR: /* пропускается
FINDSTR: /\ пропускается
FINDSTR: /* пропускается
FINDSTR: /  пропускается
FINDSTR: /  пропускается
FINDSTR: /  пропускается
FINDSTR: /. пропускается
FINDSTR: /* пропускается
FINDSTR: /  пропускается
FINDSTR: /  пропускается
FINDSTR: /  пропускается
FINDSTR: /\ пропускается
FINDSTR: /* пропускается
FINDSTR: /\ пропускается
FINDSTR: /* пропускается
FINDSTR: /\ пропускается
FINDSTR: /* пропускается
FINDSTR: /$ пропускается
FINDSTR: Ошибка в командной строке
Попытка записи в несуществующий канал.

D:\Desktop>
Как быть ?

PS
Смысл type вместо передачи файла в том, что это все делается для фильтрации вывода консольной программы.
0
Вложения
Тип файла: zip Files.zip (4.9 Кб, 7 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.01.2018, 12:07
Ответы с готовыми решениями:

VBS-скрипт отрабатывает на одном компе, и не работает на другом
Всем доброго времени суток! Не нашла раздел по vbs поэтому пишу сюда. Модераторы, переместите...

Результат запроса отрабатывает в консоли, но не отрабатывает в модуле
Доброго времени суток! Собственно проблема в следующем, есть запрос, который возвращает дату...

POST в jsp файле не отрабатывает
Такая проблема, при запуске приложения не отрабатывает POST и вот что выводит на странице..: Maths...

Регулярка работает на одном хостинге, а на другом нет
Есть форма и скрипт отправки с валидации полей формы: <? if(empty($_POST)) { $error1 =...

__________________

Записывайтесь на профессиональные курсы DevOps-инженеров
18
Любознательный
1761 / 782 / 217
Регистрация: 10.03.2016
Сообщений: 1,822
06.01.2018, 12:18 2
Цитата Сообщение от vavun Посмотреть сообщение
Как быть ?
В cmd, в частности у findstr очень ограниченные, а в некоторых случаях и корявые регэкспы... нужны регэкспы - надо перейти на powershell...
0
10529 / 5491 / 863
Регистрация: 07.04.2013
Сообщений: 15,661
06.01.2018, 12:26  [ТС] 3
Цитата Сообщение от YuS_2 Посмотреть сообщение
нужны регэкспы - надо перейти на powershell.
Да, уже сижу разбираю.
0
Эксперт Python
4469 / 3257 / 1054
Регистрация: 28.10.2013
Сообщений: 8,390
Записей в блоге: 1
06.01.2018, 15:21 4
Цитата Сообщение от vavun Посмотреть сообщение
и окончания у файлов одинаковые.
Возможно, что нет. Для findstr нужно наличие обоих символов \r\n в конце строки, чтобы этот самый конец определить.
0
10529 / 5491 / 863
Регистрация: 07.04.2013
Сообщений: 15,661
06.01.2018, 15:28  [ТС] 5
Garry Galler, я пробовал копировать часть содержимого в новый файл с тем же результатом, так что я даже и не знаю ...
0
Эксперт Python
4469 / 3257 / 1054
Регистрация: 28.10.2013
Сообщений: 8,390
Записей в блоге: 1
06.01.2018, 16:10 6
vavun,
Просто пример вашего файла прикрепите - тогда будет ясно имеются ли в нем какие-то отличия, не позволяющие findstr определить концы строк.
Вы же понимаете, что:
Windows Batch file
1
echo Microsoft (R) Windows Debugger Version 10.0.10586.567 AMD64| findstr /r /i /c:".*AMD64$"
нормально работает.

Добавлено через 4 минуты
P.S. Files.zip увидел не сразу. Посмотрим.

Добавлено через 21 минуту
Да, занятная штука - когда копируешь содержимое файла debug.txt в другой файл - получается файл с которым findstr уже "дружит" :-)

Цитата Сообщение от vavun Посмотреть сообщение
пробовал копировать часть содержимого в новый файл с тем же результатом
То есть не работало?
0
10529 / 5491 / 863
Регистрация: 07.04.2013
Сообщений: 15,661
06.01.2018, 16:35  [ТС] 7
Цитата Сообщение от Garry Galler Посмотреть сообщение
То есть не работало?
Нет =)

А в чем, собсно, проблема в моим файлом то ?
Я не осилил ее найти. Да и хз что искать, если два файла свежесозданных лежат рядом, один работает другой нет =(

Добавлено через 19 минут
Жесть.
Решил проверить непосредственно на выдаче программы с которой планировалось работать.
Вот такой код
Код
%Very long command line with arg%| findstr /r /v /c:"^\*\*\* .* \*\*\*"
Строк согласно регулярке как не бывало.
Я уж было подумал, что с ума схожу, я эту регулярку на файле несколько раз проверял - не работала.

Отсалось отфильтровать строки полностью состоящие из звездочек.
я так и не понял, как это сделать

Ну и понять, что не так с файлом =)
0
Эксперт Python
4469 / 3257 / 1054
Регистрация: 28.10.2013
Сообщений: 8,390
Записей в блоге: 1
06.01.2018, 16:43 8
Цитата Сообщение от vavun Посмотреть сообщение
А в чем, собсно, проблема в моим файлом то ?
Проблема есть, но в чем именно - понять не могу. Причем, проблема (или какой-то нюанс) существенен только для findstr: powershell с файлом работает и все находит.
0
10529 / 5491 / 863
Регистрация: 07.04.2013
Сообщений: 15,661
06.01.2018, 16:45  [ТС] 9
Цитата Сообщение от Garry Galler Посмотреть сообщение
Причем, проблема (или какой-то нюанс) существенен только для findstr
Я в поисках нюанса пробовал удалять символы, кроме букв и цифр из текста. Больше не знаю даже что пробовать
0
Эксперт Python
4469 / 3257 / 1054
Регистрация: 28.10.2013
Сообщений: 8,390
Записей в блоге: 1
06.01.2018, 17:51 10
Цитата Сообщение от vavun Посмотреть сообщение
Я в поисках нюанса пробовал удалять символы
Тут нужно наоборот - добавлять :-)
Моя первая гипотеза оказалась верной: вместо последовательности \0xD\0xA (\r\n) - программа создающая исходный файл debug.txt записывает в качестве конца строк только \0xA (\n).
Исходный файл в WinHex редакторе (после слова reserved идет подряд три перевода строки)
Регулярка findstr отрабатывает на одном файле, но не отрабатывает на другом


Тот же файл, если просто скопировать его содержимое в текстовом редакторе в новый файл:
Регулярка findstr отрабатывает на одном файле, но не отрабатывает на другом

Со вторым файлом findstr работает.
1
10529 / 5491 / 863
Регистрация: 07.04.2013
Сообщений: 15,661
06.01.2018, 17:54  [ТС] 11
Garry Galler, спасибо, интересно =)
Вот findstr и мучался с концами ...

Добавлено через 29 секунд
Только вот чего я не пойму: я же тоже копировал содержимое в новый файл.
0
Эксперт Python
4469 / 3257 / 1054
Регистрация: 28.10.2013
Сообщений: 8,390
Записей в блоге: 1
06.01.2018, 18:08 12
Цитата Сообщение от vavun Посмотреть сообщение
я же тоже копировал содержимое в новый файл.
У меня текстовый редактор SynWrite - я думаю, что он автоматом (надо настройки глянуть) при выделении содержимого и вставке в новый файл делает автозамену переводов строк в стиле UNIX (\n) или MAC (\r) на стиль windows (\r\n).
0
10529 / 5491 / 863
Регистрация: 07.04.2013
Сообщений: 15,661
06.01.2018, 18:12  [ТС] 13
Цитата Сообщение от Garry Galler Посмотреть сообщение
У меня текстовый редактор SynWrite
А у меня простой akelpad. И он на обоих файлах показывал и кодировку одинаковую и win окончания строк.

Добавлено через 2 минуты
Подскажите лучше, как выражение сделать для удаления строки состоящей полностью из звездочек ?
Я все пытаюсь подставить какой-нибудь числовой ... даже не знаю что "числовой" применительно к findstr.
Чтоб не строку из звездочек городить, а задать либо минимальное их число для "попадания" строки, или есть другой более красивый способ находить последовательности символов.
0
Эксперт Python
4469 / 3257 / 1054
Регистрация: 28.10.2013
Сообщений: 8,390
Записей в блоге: 1
06.01.2018, 18:14 14
Цитата Сообщение от vavun Посмотреть сообщение
И он на обоих файлах показывал и кодировку одинаковую и win окончания строк
И у меня SynWrite также показывал (спец. символами), что окончания строк в файлах одинаковые.
То ли врал, то из-за автозамены это уже было правдой.
Поэтому только WinHex все объяснил.
1
Любознательный
1761 / 782 / 217
Регистрация: 10.03.2016
Сообщений: 1,822
06.01.2018, 18:50 15
Цитата Сообщение от vavun Посмотреть сообщение
Только вот чего я не пойму: я же тоже копировал содержимое в новый файл.
Дык тут уже многое зависит от редактора, как он воспринимает формат новой строки...
Вообще 0Dh - формат новой строки для MAC-ов, а для Win, это именно 0D0Ah
Вот я и говорю, что cmd, findstr - устаревающее ПО, а в особенности для работы с регэкспами...
0
Любознательный
1761 / 782 / 217
Регистрация: 10.03.2016
Сообщений: 1,822
06.01.2018, 18:52 16
Цитата Сообщение от vavun Посмотреть сообщение
А у меня простой akelpad. И он на обоих файлах показывал и кодировку одинаковую и win окончания строк.
Вообще-то \n, а в новом файле - зависит от настроек AP, у меня было \r\n:
1
Миниатюры
Регулярка findstr отрабатывает на одном файле, но не отрабатывает на другом  
10529 / 5491 / 863
Регистрация: 07.04.2013
Сообщений: 15,661
06.01.2018, 18:56  [ТС] 17
Цитата Сообщение от YuS_2 Посмотреть сообщение
Вообще-то:
У меня такого нет =)
Где включить ? Что за аддон ?
0
Любознательный
1761 / 782 / 217
Регистрация: 10.03.2016
Сообщений: 1,822
06.01.2018, 19:00 18
Цитата Сообщение от vavun Посмотреть сообщение
Где включить ? Что за аддон ?
Вроде бы штатный плаг - SpecialChar
1
Миниатюры
Регулярка findstr отрабатывает на одном файле, но не отрабатывает на другом   Регулярка findstr отрабатывает на одном файле, но не отрабатывает на другом  
Изображения
 
10529 / 5491 / 863
Регистрация: 07.04.2013
Сообщений: 15,661
06.01.2018, 19:03  [ТС] 19
Цитата Сообщение от YuS_2 Посмотреть сообщение
Вроде бы штатный плаг - SpecialChar
Вот теперь все встало на свои места
Регулярка findstr отрабатывает на одном файле, но не отрабатывает на другом
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.01.2018, 19:03

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Можно ли на javascript'e в одном js-файле использовать функции, описанные в другом js-файле?
Подскажите, плз, можно ли на javascript'e в одном js-файле использовать функции, описанные в другом...

Как передать значение переменной PHP в одном файле в переменную JS в другом файле?
Подскажите пожалуйста, как передать значение PHP из одного файла в JS в другом. Везде облазил....

Сравнение слов в одном файле со словами в другом файле
Здравствуйте! Суть задачи такая: 1. Первый файл - запросы с городами, второй файл - база городов...

Сравнение слов в одном файле со словами в другом файле
Здравствуйте! Суть задачи такая: 1. Первый файл - запросы с городами, второй файл - база городов...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.