Войти

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


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

vngreez@vk
22-06-2017, 17:37
вместо /system/etc будет стоять %%a (цикл из другого файла). В зависимости от того найдено ли слово, будет выполняться условие
ФУх.. Ну так хоть объяснил?
Желательно использовать bat команды чтобы получить код возврата ошибки

x0r, Iska, greg zakharov, Весь геморой в том, что должен быть ТОЧНЫЙ поиск
возьму другой пример: /system/app
Его необходимо найти, но вместо него найдется всякий хлам:
/system/app/тырыпыры
/system/app/lib
и тд.
А мне нужной найти что я написал /system/app, он может быть и не быть записан в файл

greg zakharov
22-06-2017, 17:53
Вам уже указали на точный поиск. Вам нужно:
1) узнать есть ли строка /system/etc в файле
2) в строке после обозначенных выше символов больше ничего не встречается, т.е. /system/etc или /system/app и все, - далее прочие строки
3) если строки /system/etc нет, вернуть некий код ошибки
Так? Или предпочтете воспользовоться звонком другу не так?

vngreez@vk
22-06-2017, 18:02
greg zakharov, 2) встречаеться /system/etc/sensor u: object_r:system_sensor_data_file:s0
жирным выделил

greg zakharov
22-06-2017, 18:07
Iska, надеюсь Вы не будете против, если я пополню Ваш клуб случайно облысевших?

vngreez@vk, пардон, но искать тогда что и что в данном случае может быть "точным поиском"? Вам нужно еще "хвост" в этой строке захватить регулярным выражением?

vngreez@vk
22-06-2017, 18:21
greg zakharov, да

greg zakharov
22-06-2017, 18:38
То есть, допустим, файл:
...
/system/bin/vtservice u:object_r:vtservice_exec:s0
/system/bin/hotknot_native_service u:object_r:hotknot_native_exec:s0
/system/bin/teei_daemon u:object_r:teei_daemon_exec:s0
/system/bin/init_thh u:object_r:init_thh_service_exec:s0
/system/etc u:object_r:system_sensor_data_file:s0
/system/bin/md_monitor u:object_r:md_monitor_exec:s0
/system/bin/mvg_spoh u:object_r:mvg_spoh_exec:s0
/system/bin/fpserver u:object_r:fpserver_exec:s0
/system/app u:object_r:system_sensor_data_file:s0
...
Тогда:
@echo off
setlocal enabledelayedexpansion
set "re=/system/# u:object_r:system_sensor_data_file:s0"
for %%i in (etc app) do (
>nul findstr /l /c:"!re:#=%%i!" file.txt&&echo:%%i found
)
endlocal
exit /b
Так?

x0r
22-06-2017, 18:42
фигня кокая-то... может это багоглюк в традициях M$ :search:
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
/system/app/qweee
/system/app/lib
/system/app/qewqeqwe
/system/app

1 если искать /system/etc

findstr /X /C:"/system/etc" file.txt
/system/etc

т.е. находит.

2 если искать /system/app

findstr /X /C:"/system/app" file.txt


т.е. ненаходит нифига ?:

3 если сделать через type или sort

type file.txt | findstr /X /C:"/system/app"
/system/app

sort file.txt | findstr /X /C:"/system/app"
/system/app

sort file.txt | findstr /X /C:"/system/etc"
/system/etc



то находит всегда. Это чего, дело в алфавите, в порядке расположения строк для findstr чтоле?!

x0r
22-06-2017, 19:11
upd: дошло. дело в том, что это последняя строка и там EOF. мдаааа... так что всё равно, это считай баг опции findstr /X : если искомое выражение стоит последним в файле, то не будет найдено.

megaloman
22-06-2017, 19:20
vngreez@vk, строка вида
/system/etc тырыпыры
должна быть найдена, или она ошибочная? Тогда почему?

Iska
22-06-2017, 19:23
Iska, надеюсь Вы не будете против, если я пополню Ваш клуб случайно облысевших? »
Легко! :)

Вся королевская конница,
Вся королевская рать…

greg zakharov
22-06-2017, 19:39
Вся королевская конница,
Вся королевская рать…
Не может Шайтана, не может Болтая,
Шайтана-Болтая собрать...

Iska
22-06-2017, 20:30
В данном случае — не Болтая.

megaloman
22-06-2017, 21:18
vngreez@vk, Что здесь не так? @Echo Off
Cls

Set "FileIn=Z:\Box_Arc\file\file.txt"
Set "Spisok=/system/etc /system/app /system/bin"

FOR %%f IN (%Spisok%) DO More "%FileIn%" | findstr.exe /l /N /c:"%%~f "

pause

vngreez@vk
23-06-2017, 13:01
x0r, megaloman, Iska, greg zakharov, шутки шутками, я вот не могу понять что тут сложного: найти слово точно.
Вообщем сам нашел решение и сделал вот так:
set "fixFileContext=file.tx"
set "sysFiles=sorerzimoe.txt"

for /F "usebackq tokens=1-5 delims= " %%a in ("%sysFiles%") do (
findstr /B "^/%%a\>" %fixFileContext% && (
for /f %%f in ('find "%%a" %fixFileContext%') do (
if "%%a"=="%%f" ( код...
Всем спасибо за помощь
и пополнения словаря шутак

alpap
23-06-2017, 22:50
vngreez@vk,
ну да, ну да

если в file.txt (неправильно расширение в коде - опечатка) строка /system/etc,
а в sorerzimoe.txt то что в шапке темы (имееться файл file.txt, вот его содержимое)

то даже это уже не работает, что говорит о том что свой код вы даже не запускали ни разу
и зачем остальные четыре токена?

@echo on
set "fixFileContext=file.txt" &: Здесь опечатка в расширении была
set "sysFiles=sorerzimoe.txt"

:: Дальше темный лес, уже это не работает
for /F "usebackq tokens=1-5 delims= " %%a in ("%sysFiles%") do findstr /B "^/%%a\>" %fixFileContext%
pause


если поменять содержимое текстовиков наоборот
в file.txt как в шапке, а в sorerzimoe.txt строка "/system/etc /system/app /system/bin"
то точно также не работает

покажите содержимое обоих файлов, полный код и скриншот окна cmd где видно что найдено то что нужно.

кстати
и пополнения словаря шутак »
относится к вашему второму for

например file.txt содержит строку: slovo
вот аналог второго for

@echo off
set "a=slovo"
for /f %%f in ('find "%a%" file.txt') do if "%a%"=="%%f" echo %a% естественно равно %%f
pause




© OSzone.net 2001-2012