Войти

Показать полную графическую версию : findstr точный поиск


Страниц : [1] 2

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:... пробелов не должно быть, поставил из-за того что появляется смайл )

Iska
21-06-2017, 21:30
имееться файл 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!"
И будет Вам счастье.

Iska
21-06-2017, 23:20
Вопрос только — зачем извлекать из строки то, что и так известно?

vngreez@vk
21-06-2017, 23:40
Iska, greg zakharov, в моем коде присутствует цикл (for /f) и вместо /system/etc (я использую этот вариант в качестве примера) может быть любое значения. Но из-за этого не хочет нормальна работать код.
Вместо system/etc может найтись любый значения: /system/etc/sensor, /system/etc/lib.... Хотя я так не задумывал
Может есть все таки способ?

Iska
22-06-2017, 00:53
vngreez@vk, пока я так и не понял, что именно Вы хотите найти, и что получить в результате.

greg zakharov
22-06-2017, 07:41
Вопрос только — зачем извлекать из строки то, что и так известно?Каков ТЗ, таков ХЗ.
в моем коде присутствует цикл (for /f)Солидарен с Iska, ибо уже без бутылки здесь похоже уже не разобраться. Почему просто не привести свой код, объяснить что Вы хотите добиться, словом, четко сформулировать свои мысли, ммм?! Четко сформулированная задача - половина решения последней.

vngreez@vk
22-06-2017, 11:35
Iska, greg zakharov, Мне нужен точный поиск слова в тексте, вот и вся задача.
greg zakharov, извлекать строку по подстроке мне не нужно

alpap
22-06-2017, 12:00
Вместо system/etc может найтись любый значения: /system/etc/sensor, /system/etc/lib.... Хотя я так не задумывал »
давайте по полочкам

если у вас задача найти в тексте именно "/system/etc", хотя такой строки там сейчас и нет, то сделать это просто, но сразу напрашивается вопрос Вопрос только — зачем извлекать из строки то, что и так известно? », в данном случае искать
естественно и с учетом того что в тексте есть строка СОДЕРЖАЩАЯ в себе "/system/etc" вам стали предлагать решения по поиску таких строк и уже с учетом ваших желаний еще и извлекать эту часть из строки, но и это не то, начинаем телепатировать

вариант1
в тексте есть несколько строк, содержащих "/system/etc" и только одна строка чисто "/system/etc" и ее надо найти

вариант2
в тексте есть несколько строк, содержащих "/system/etc", но строк именно "/system/etc", например несколько, найти первую встретившуюся или последнюю или определенную по счету

посмотрим что вы ответите

Iska
22-06-2017, 12:04
Мне нужен точный поиск слова в тексте, вот и вся задача. »
Это не задача. Это выбранное Вами решение для неизвестной нам задачи. Например, это:
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
22-06-2017, 14:34
Iska, В первом примере снова находиться другая строка, »

Какая находится?
Какая должна по Вашему мнению находиться?


И, может быть, Вы таки озвучите Вашу задачу? Повторяю: не выбранное Вами решение, а задачу. Ибо, если как минимум пять человек не могут толком понять, чего Вы хотите — значит, явно что-то не так.

x0r
22-06-2017, 15:57
=>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).

Iska
22-06-2017, 16:22
x0r — это шесть! ;)

x0r
22-06-2017, 17:15
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