Войти

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


batyaPS
16-07-2017, 11:38
скрипт1
есть папка mail
в ней куча почтовых профилей пользователей
нужно найти все файлы msgFilterRules.dat в подпапках с рекурсией без ограничения
и произвести поиск замену(возможно удаление текста) текста



скрипт2
есть папка mail
в ней куча почтовых профилей пользователей
нужно найти файлы prefs.js не глубже одного вхождения

т.е.
mail
user1
prefs.js
user2
prefs.js
...
prefs.js
userN
prefs.js

и произвести сложный поиск/замену текста

нужно строку вида corp/*текст_имя_пользователя*/*текст_имя_ящика*
поменять на строку вида corp/*тескт*/m_*текст*
т.е. нужно добавить только m_

данный текст встречается только в строке такого вида
user_pref("mail.server.server1.realuserName", "corp/user_fio/imya_yacika");
user_pref("mail.server.server2.realuserName", "corp/user_fio/imya_yacika");
....
user_pref("mail.server.server9.realuserName", "corp/user_fio/imya_yacika");


т.е. все возможные строки
user_pref("mail.server.server1-9.realuserName", "corp/user_fio/imya_yacika");
нужно поменять на
user_pref("mail.server.server1-9.realuserName", "corp/user_fio/m_imya_yacika");

batyaPS
17-07-2017, 08:21
могу добавить что имя папки профиля пользователя совпадает с user_fio
т.е. userN=user_fio
может можно как подсчитать кол-во символов в названии папки userN
добавить туда кол-во символов corp/userN/ и после второго знака / добавить m_

или искать строки с текстом realuserName
запомнить что папка в которой находимся называется userN
и после userN/добавить m_

или второй символ / отлавить в строке содержащей realuserName
и поставить после него m_

batyaPS
17-07-2017, 09:31
прошу..

можно на повершеле

batyaPS
18-07-2017, 10:10
ап
прошу помощи

x0r
18-07-2017, 11:23
возьми программу и сделай поиск и замену. PM

batyaPS
18-07-2017, 16:32
программа с задачей 2 справиться не может
не хватает возможности получать переменную и использовать её при замене

x0r
19-07-2017, 17:32
ну а если так:
найти:
corp/user_*[]/
заменить:
corp/user_%1/m_

batyaPS
19-07-2017, 18:32
работает
.realuserName", "corp/*[]/
.realuserName", "corp/%1/m_




может ещё подскажешь как заменить
.useremail", "user@oooo.aaaaa.ru");
на
.useremail", "user@aaaaa.ru");

т.е. жирное удалить
user и aaaaa.ru перменные
одинаковое для всех oooo.

вроде так получается
.useremail", "*@oooo.
.useremail", "%1@

x0r
19-07-2017, 20:45
ну вроде так, да ;-)

зы. Всё она справляеццо. Ничего другого подобного нету(я не видел). Прога уникальна и для таких случаев must have! чем писать скрипты в языках кот. для сложных операций с текстом не особопредназначены (cmd\bat ) - лучше взять её. Replace Studio Pro (Search and Replace) (http://www.searchandreplace.com/replace_studio_pro.htm)
Просто RTFM и понять синтаксис её регулярных выражений. В справке всё есть, с примерами. Он, синтаксис, отличается от JS, как и ситаксис RexEx в TC и проч. случаях.

Busla
19-07-2017, 22:56
x0r, зачем учить новый странный синтаксис регулярок, если масса продуктов поддерживает стандартный?
Хочешь - в powershell пишешь:
'user_pref("mail.server.server1.realuserName", "corp/user_fio/imya_yacika");' -replace 'corp/user_.*/', '$&m_'
Хочешь - то же самое в форме замены в Notepad++ указываешь

x0r
19-07-2017, 23:15
Busla, ну смысл сделать это все для множества файлов, разных расширений в разных папках. Массово. в этом был вопрос TS. Для этого, предложил ему эту прогу.
Есть эта прога и в ней всё , с предпростмотром и быстро этовсё делаеццо ибо С++.

Есть желание писать скрипты для этого - пожалуйста, делай. можно какой-то foreach заюзать ... я не спец.




© OSzone.net 2001-2012