Показать полную графическую версию : findstr точный поиск
vngreez@vk
21-06-2017, 20:53
имееться файл file.txt, вот его содержимое:
============
/system/bin/mtkmal u: object_r:mtkmal_exec:s0
/system/bin/wifi2agps u: object_r:wifi2agps_exec:s0
/system/bin/wmt_loader u: object_r:wmt_loader_exec:s0
/system/bin/xlog u: object_r:xlog_exec:s0
/system/bin/sbchk u: object_r:sbchk_exec:s0
/system/bin/OperaMaxSystem u: object_r:tunman_exec:s0
/system/etc/sensor u: object_r:system_sensor_data_file:s0
/system/vendor/bin/pvrsrvctl u: object_r:pvrsrvctl_exec:s0
/system/xbin/BGW u: object_r:BGW_exec:s0
/system/xbin/mnld u: object_r:mnld_exec:s0
/system/bin/md_ctrl u: object_r:md_ctrl_exec:s0
/system/bin/cmddumper u: object_r:cmddumper_exec:s0
============
findstr "^/system/etc\>" file.txt
Данная команда должна найти текст /system/etc.
146383
Она работает некорректно, вместо указанного выше текста, находиться /system/etc/sensor u: object_r:system_sensor_data_file:s0
Как это исправить?
(где: u: object_r:... пробелов не должно быть, поставил из-за того что появляется смайл )
имееться файл file.txt, вот его содержимое: »
Упакуйте файл file.txt в архив и приложите к сообщению, либо выложите архив на RGHost или Яндекс.Диск.
(где: u: object_r:... пробелов не должно быть, поставил из-за того что появляется смайл ) »
Обрамили бы тэгом code — не появился бы. Либо установили бы флажок «Разное: Отключить смайлики в тексте» справа от поля ввода.
greg zakharov
21-06-2017, 21:31
Сейчас придет Iska и посоветует использовать ключ /l.Со своей же стороны:
findstr /rc:"^/system/etc$" file.txt
vngreez@vk
21-06-2017, 21:49
Iska,
vngreez@vk
21-06-2017, 21:51
greg zakharov, не получилось
greg zakharov
21-06-2017, 22:12
Вы всерьез полагаете, что findstr работает как grep? fiindstr не умеет извлекать регуляркой подстроки в строке.
Наберите в самой командной строке:
cmd /v/c "(for /f "tokens=1" %i in ('findstr /rc:""^/system/etc"" file.txt') do @set i=%i)&echo !i:~0,11!"
И будет Вам счастье.
Вопрос только — зачем извлекать из строки то, что и так известно?
vngreez@vk
21-06-2017, 23:40
Iska, greg zakharov, в моем коде присутствует цикл (for /f) и вместо /system/etc (я использую этот вариант в качестве примера) может быть любое значения. Но из-за этого не хочет нормальна работать код.
Вместо system/etc может найтись любый значения: /system/etc/sensor, /system/etc/lib.... Хотя я так не задумывал
Может есть все таки способ?
vngreez@vk, пока я так и не понял, что именно Вы хотите найти, и что получить в результате.
greg zakharov
22-06-2017, 07:41
Вопрос только — зачем извлекать из строки то, что и так известно?Каков ТЗ, таков ХЗ.
в моем коде присутствует цикл (for /f)Солидарен с Iska, ибо уже без бутылки здесь похоже уже не разобраться. Почему просто не привести свой код, объяснить что Вы хотите добиться, словом, четко сформулировать свои мысли, ммм?! Четко сформулированная задача - половина решения последней.
vngreez@vk
22-06-2017, 11:35
Iska, greg zakharov, Мне нужен точный поиск слова в тексте, вот и вся задача.
greg zakharov, извлекать строку по подстроке мне не нужно
Вместо system/etc может найтись любый значения: /system/etc/sensor, /system/etc/lib.... Хотя я так не задумывал »
давайте по полочкам
если у вас задача найти в тексте именно "/system/etc", хотя такой строки там сейчас и нет, то сделать это просто, но сразу напрашивается вопрос Вопрос только — зачем извлекать из строки то, что и так известно? », в данном случае искать
естественно и с учетом того что в тексте есть строка СОДЕРЖАЩАЯ в себе "/system/etc" вам стали предлагать решения по поиску таких строк и уже с учетом ваших желаний еще и извлекать эту часть из строки, но и это не то, начинаем телепатировать
вариант1
в тексте есть несколько строк, содержащих "/system/etc" и только одна строка чисто "/system/etc" и ее надо найти
вариант2
в тексте есть несколько строк, содержащих "/system/etc", но строк именно "/system/etc", например несколько, найти первую встретившуюся или последнюю или определенную по счету
посмотрим что вы ответите
Мне нужен точный поиск слова в тексте, вот и вся задача. »
Это не задача. Это выбранное Вами решение для неизвестной нам задачи. Например, это:
type file.txt | findstr.exe /l /c:"/system/etc"
(прав был коллега greg zakharov, ой, прав — таки «/l» ;)) — находит эту подстроку. Если Вас интересует совпадение только со всей строкой в целом, а не с любой её частью — тогда указанное коллегой greg zakharov выше:
type file.txt | findstr.exe /r /c:"^/system/etc$"
и в том, и в другом случае по коду возврата мы можем сделать вывод об успешности поиска.
megaloman
22-06-2017, 14:25
vngreez@vk, Огласите весь список, пожалуйста!Iska, У меня зародилось подозрение, что задача стоИт так:
Есть файл со строками вида "строка1 строка2"
Надо определить, есть ли в файле строка, где "строка1" имеет определённый вид.
Если это так, то решение Iska примет вид:type file.txt | findstr.exe /l /N /c:"/system/etc "
Всего-то пробел добавить в конце искомой подстроки.
vngreez@vk
22-06-2017, 14:29
Iska, В первом примере снова находиться другая строка, во втором она не работает, потому что текст не закачивается, а присутствует еще текст:
/system/vendor/bin/pvrsrvctl u: object_r:pvrsrvctl_exec:s0
alpap, Нужен именно первый вариант
Iska, В первом примере снова находиться другая строка, »
Какая находится?
Какая должна по Вашему мнению находиться?
И, может быть, Вы таки озвучите Вашу задачу? Повторяю: не выбранное Вами решение, а задачу. Ибо, если как минимум пять человек не могут толком понять, чего Вы хотите — значит, явно что-то не так.
=>grep -o "/system/etc" file.txt
/system/etc
он хочет ;-)
Ну дык и возьми grep для этого. findstr этого вродеб не умеет.
greg zakharov
22-06-2017, 16:06
x0r, да хоть perl'ом:
$ perl -ne "print $1 if /^(\/system\/etc)/" file.txt
/system/etc
Уже писал несколькими постами ранее, что findstr - не grep (и уж тем более не perl).
greg zakharov, ага, есть такое. я пропустил. :cool:
Хотя и действительно неясно: зачем искать только то, что и так известно - найти "/system/etc" чтоб взять "/system/etc" ... Можнож сразу взять /system/etc (в переменную) и ничего нигде не искать.
Может тебе это надо:
>findstr /X "^/system/etc" file.txt
содержание файла file.txt
/system/bin/mtkmal u: object_r:mtkmal_exec:s0
/system/bin/wifi2agps u: object_r:wifi2agps_exec:s0
/system/bin/wmt_loader u: object_r:wmt_loader_exec:s0
/system/etc
/system/bin/xlog u: object_r:xlog_exec:s0
/system/bin/sbchk u: object_r:sbchk_exec:s0
/system/bin/OperaMaxSystem u: object_r:tunman_exec:s0
/system/etc/sensor u: object_r:system_sensor_data_file:s0
/system/vendor/bin/pvrsrvctl u: object_r:pvrsrvctl_exec:s0
/system/xbin/BGW u: object_r:BGW_exec:s0
/system/xbin/mnld u: object_r:mnld_exec:s0
/system/bin/md_ctrl u: object_r:md_ctrl_exec:s0
/system/bin/cmddumper u: object_r:cmddumper_exec:s0
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.