![]() |
findstr точный поиск
Вложений: 1
имееться файл 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 и посоветует использовать ключ /l.Со своей же стороны:
Код:
findstr /rc:"^/system/etc$" file.txt |
Вложений: 1
Iska,
|
greg zakharov, не получилось
|
Вы всерьез полагаете, что 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, greg zakharov, в моем коде присутствует цикл (for /f) и вместо /system/etc (я использую этот вариант в качестве примера) может быть любое значения. Но из-за этого не хочет нормальна работать код.
Вместо system/etc может найтись любый значения: /system/etc/sensor, /system/etc/lib.... Хотя я так не задумывал Может есть все таки способ? |
vngreez@vk, пока я так и не понял, что именно Вы хотите найти, и что получить в результате.
|
Цитата:
Цитата:
|
Iska, greg zakharov, Мне нужен точный поиск слова в тексте, вот и вся задача.
greg zakharov, извлекать строку по подстроке мне не нужно |
Цитата:
если у вас задача найти в тексте именно "/system/etc", хотя такой строки там сейчас и нет, то сделать это просто, но сразу напрашивается вопрос Цитата:
естественно и с учетом того что в тексте есть строка СОДЕРЖАЩАЯ в себе "/system/etc" вам стали предлагать решения по поиску таких строк и уже с учетом ваших желаний еще и извлекать эту часть из строки, но и это не то, начинаем телепатировать вариант1 в тексте есть несколько строк, содержащих "/system/etc" и только одна строка чисто "/system/etc" и ее надо найти вариант2 в тексте есть несколько строк, содержащих "/system/etc", но строк именно "/system/etc", например несколько, найти первую встретившуюся или последнюю или определенную по счету посмотрим что вы ответите |
Цитата:
Код:
type file.txt | findstr.exe /l /c:"/system/etc" Код:
type file.txt | findstr.exe /r /c:"^/system/etc$" |
vngreez@vk,
Цитата:
Есть файл со строками вида "строка1 строка2" Надо определить, есть ли в файле строка, где "строка1" имеет определённый вид. Если это так, то решение Iska примет вид: Код:
type file.txt | findstr.exe /l /N /c:"/system/etc " |
Iska, В первом примере снова находиться другая строка, во втором она не работает, потому что текст не закачивается, а присутствует еще текст:
/system/vendor/bin/pvrsrvctl u: object_r:pvrsrvctl_exec:s0 alpap, Нужен именно первый вариант |
Цитата:
И, может быть, Вы таки озвучите Вашу задачу? Повторяю: не выбранное Вами решение, а задачу. Ибо, если как минимум пять человек не могут толком понять, чего Вы хотите — значит, явно что-то не так. |
Код:
=>grep -o "/system/etc" file.txt Ну дык и возьми grep для этого. findstr этого вродеб не умеет. |
x0r, да хоть perl'ом:
Код:
$ perl -ne "print $1 if /^(\/system\/etc)/" file.txt |
x0r — это шесть! ;)
|
greg zakharov, ага, есть такое. я пропустил. :cool:
Хотя и действительно неясно: зачем искать только то, что и так известно - найти "/system/etc" чтоб взять "/system/etc" ... Можнож сразу взять /system/etc (в переменную) и ничего нигде не искать. Может тебе это надо: Код:
>findstr /X "^/system/etc" file.txt Код:
/system/bin/mtkmal u: object_r:mtkmal_exec:s0 |
вместо /system/etc будет стоять %%a (цикл из другого файла). В зависимости от того найдено ли слово, будет выполняться условие
ФУх.. Ну так хоть объяснил? Желательно использовать bat команды чтобы получить код возврата ошибки x0r, Iska, greg zakharov, Весь геморой в том, что должен быть ТОЧНЫЙ поиск возьму другой пример: /system/app Его необходимо найти, но вместо него найдется всякий хлам: /system/app/тырыпыры /system/app/lib и тд. А мне нужной найти что я написал /system/app, он может быть и не быть записан в файл |
Вам уже указали на точный поиск. Вам нужно:
1) узнать есть ли строка /system/etc в файле 2) в строке после обозначенных выше символов больше ничего не встречается, т.е. /system/etc или /system/app и все, - далее прочие строки 3) если строки /system/etc нет, вернуть некий код ошибки Так? Или |
greg zakharov, 2) встречаеться /system/etc/sensor u: object_r:system_sensor_data_file:s0
жирным выделил |
Iska, надеюсь Вы не будете против, если я пополню Ваш клуб случайно облысевших?
vngreez@vk, пардон, но искать тогда что и что в данном случае может быть "точным поиском"? Вам нужно еще "хвост" в этой строке захватить регулярным выражением? |
greg zakharov, да
|
То есть, допустим, файл:
Код:
... Код:
@echo off |
фигня кокая-то... может это багоглюк в традициях M$ :search:
file.txt : Код:
/system/bin/mtkmal u: object_r:mtkmal_exec:s0 Код:
findstr /X /C:"/system/etc" file.txt 2 если искать /system/app Код:
findstr /X /C:"/system/app" file.txt 3 если сделать через type или sort Код:
type file.txt | findstr /X /C:"/system/app" |
upd: дошло. дело в том, что это последняя строка и там EOF. мдаааа... так что всё равно, это считай баг опции findstr /X : если искомое выражение стоит последним в файле, то не будет найдено.
|
vngreez@vk, строка вида
/system/etc тырыпыры должна быть найдена, или она ошибочная? Тогда почему? |
Цитата:
Цитата:
|
Цитата:
Шайтана-Болтая собрать... |
В данном случае — не Болтая.
|
vngreez@vk, Что здесь не так?
Код:
@Echo Off |
x0r, megaloman, Iska, greg zakharov, шутки шутками, я вот не могу понять что тут сложного: найти слово точно.
Вообщем сам нашел решение и сделал вот так: Код:
set "fixFileContext=file.tx" и пополнения словаря шутак |
vngreez@vk,
ну да, ну да если в file.txt (неправильно расширение в коде - опечатка) строка /system/etc, а в sorerzimoe.txt то что в шапке темы (имееться файл file.txt, вот его содержимое) то даже это уже не работает, что говорит о том что свой код вы даже не запускали ни разу и зачем остальные четыре токена? Код:
@echo on в file.txt как в шапке, а в sorerzimoe.txt строка "/system/etc /system/app /system/bin" то точно также не работает покажите содержимое обоих файлов, полный код и скриншот окна cmd где видно что найдено то что нужно. кстати Цитата:
например file.txt содержит строку: slovo вот аналог второго for Код:
@echo off |
Время: 20:50. |
Время: 20:50.
© OSzone.net 2001-