LINUX.ORG.RU
решено ФорумAdmin

find regex

 ,


0

1

1) Дано:

root@h231:/# ls -1 /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/ 
180d5995-7f80-4f8c-857a-ad395f63b3eb
1CV8Clst.lst
1CV8Clsto.lst
22cb37c6-8047-4c8b-90b6-8e6c0691ee8c
48295064-0894-446b-88f8-9f530401bd9b
48d1b5b1-8d07-4877-8b24-f2631d3feb33
51aee215-917b-4a69-8054-921d7d8f1f67
70cb9877-20ef-463f-9493-408ecf2ff175
a98700e1-2137-4d16-9145-1769d07ee49f
d3713b98-e437-4c4f-897c-0f5b0ca73fdb
e657e41b-9cfa-46f4-a97f-5d8a613005de
e98db621-989a-49db-9553-01f90f50d947
rescntsrv.lst
snccntx9a3aa7ba-b8cf-4ed0-b424-f8ee19602c7e
root@h231:/
2) Требуется: удалить все директории «********-****-****-****-************»
3) Составил строку:
^([\w]{8}[-]{1}[\w]{4}[-]{1}[\w]{4}[-]{1}[\w]{4}[-]{1}[\w]{12})$
4) Проверил сервисом https://regexr.com/6ub12

5) Применил с «find»:

root@h231:/# find /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/ -regextype posix-awk -regex "^([\w]{8}[-]{1}[\w]{4}[-]{1}[\w]{4}[-]{1}[\w]{4}[-]{1}[\w]{12})$"
root@h231:/#
Совпадений не найдено!

★★★★★

Последнее исправление: petav (всего исправлений: 1)

Рекомендую всегда начинать любое писательство с изучения предмета. Этот регексп ужасен. [\w] эквивалентно \w, [-]{1} эквивалентно -. Скобки в начале и конце здесь вообще не нужны.

Регекспы вообще тяжело читать и отлаживать, а когда они записываются с кучей ненужного мусора, то эта задача усложняется ещё сильнее.

emorozov
()

********-****-****-****-************

Ты ошибся, вилдкард одного символа записывается не звёздочкой, а знаком вопроса, то есть ????????-????-????-????-????????????

Удаление, соответственно, так:

rm -Rf ????????-????-????-????-????????????

regex

Брось эту гадость.

find

Не нужен он тут. Для проверки раскрытия вилдкардов можно использовать echo:

echo ????????-????-????-????-????????????

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
-regex pattern
              File name matches regular expression pattern. This is a
              match on the whole path, not a search.


This is a match on the whole path, not a search.
This is a match on the whole path, not a search.
This is a match on the whole path, not a search.

thesis ★★★★★
()
Ответ на: комментарий от kostik87

(a-z0-9){8} - это невалидный синтаксис (.*){8} - это бессмысленное выражение

регекспы - это язык, который надо изучать, не работает в них подход: наворочу сейчас из того, что где-то видел, здесь накидаю скобок, здесь слэшей, если выйдет ошибка, добавлю ещё больше.

При таком подходе получается в лучшем случае неоптимальный по скорости регексп. И всегда нечитаемый.

emorozov
()
Ответ на: комментарий от kostik87

А почему не просто:

root@h231:/# find  /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/  -regex "(a-z0-9){8}-(a-z0-9){4}-(a-z0-9){4}-(a-z0-9){4}-(a-z0-9){12}"
root@h231:/# 

А почему не просто:

root@h231:/# find  /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/  -regex "(.*){8}-(.*){4}-(.*){4}-(.*){4}-(.*){12}"
root@h231:/# 

petav ★★★★★
() автор топика
#!/bin/sh

# Да, это ньюлайн!
IFS='
'

x="[0-9a-f]"
y="${x}${x}${x}${x}"
z="${y}${y}-${y}-${y}-${y}-${y}${y}${y}"

for i in $(find /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/ -mindepth 1 -maxdepth 1 -type d -print); do
  case "${i}" in
    (*/${z}) rm -fR "${i}" ;;
    (*) ;;
  esac
done
mord0d ★★★★★
()
ivoc@Ivoc-T14s:~/test$ ls -lah                                                                                          total 20K                                                                                                               drwxr-xr-x  5 ivoc ivoc 4.0K Sep 21 21:48 .                                                                             drwxr-xr-x 17 ivoc ivoc 4.0K Sep 21 21:47 ..                                                                            -rw-r--r--  1 ivoc ivoc    0 Sep 21 21:48 1CV8Clst.lst                                                                  drwxr-xr-x  2 ivoc ivoc 4.0K Sep 21 21:47 d3713b98-e437-4c4f-897c-0f5b0ca73fdb                                          drwxr-xr-x  2 ivoc ivoc 4.0K Sep 21 21:47 e98db621-989a-49db-9553-01f90f50d947                                          -rw-r--r--  1 ivoc ivoc    0 Sep 21 21:47 rescntsrv.lst                                                                 drwxr-xr-x  2 ivoc ivoc 4.0K Sep 21 21:47 snccntx9a3aa7ba-b8cf-4ed0-b424-f8ee19602c7e                                   ivoc@Ivoc-T14s:~/test$ find ./ -type d -not -path "./snccntx*"                                                          ./                                                                                                                      ./e98db621-989a-49db-9553-01f90f50d947                                                                                  ./d3713b98-e437-4c4f-897c-0f5b0ca73fdb                                                                                  ivoc@Ivoc-T14s:~/test$                                                                                                                             

У платформы 1С в этом каталоге могут быть созданы только конкретные файлы с конкретными именами, каталоги, которые ты хочешь удалить с именами вида UUID и один каталог с именем «snccntx»+UUID

BOOBLIK ★★★
()
Последнее исправление: BOOBLIK (всего исправлений: 1)
Ответ на: комментарий от BOOBLIK

Верно. Удаление кеша конфигурации (кэш полнотекстового поиска, журнал регистрации). Действия:

# 1. Stop srv1cv83
service srv1cv83 stop
# 1.1 Check service srv1cv83 stop?
service srv1cv83 status
ps -A|grep rphost
# 2. Backup home directory 1C user!
cd /backupdisk
tar czvf backup_home_usr1cv8-`date +"%d-%m-%Y_%H%M%S"`.tar.gz /home/usr1cv8/.1cv8
# 3. Delete кэш полнотекстового поиска, журнал регистрации
ls -d1 /home/usr1cv8/.1cv8/1C/1cv8/reg_1541/*|grep -P "^.*/\S{8,15}-\S{4}-\S{4}-\S{4}-\S{12}$"|xargs rm -rf --
# 4. Start srv1cv83
service srv1cv83 start
# 4.1 Check service srv1cv83 started?
service srv1cv83 status
ps -A|grep rphost

petav ★★★★★
() автор топика
Ответ на: комментарий от petav

date +"%d-%m-%Y_%H%M%S": даты в именах файлов лучше записывать как %Y-%m-%d-%H%M%S - правильно сортироваться по дате в листингах будут.

В данном регекспе начальная часть "^.*/ - лишняя, она не делает ничего полезного, только замедляет регексп. Если её удалить, то получится полностью эквивалетный регексп, только более читаемый и быстрый.

Ещё раз: регекспы - это язык, почти полный по Тьюрингу (или даже полный в каких-то реализациях). Его надо специально изучать, прежде, чем писать на нем. Иначе правильные и оптимальные регекспы никогда не получатся. Лучшая книжка по регекспам - Джефри Фридла, на русском издавалась неоднократно.

emorozov
()