Имя: Пароль:
1C
1С v8
Командой sed отобрать из ТЖ нужные данные
0 DoctorRoza
 
07.07.24
17:36
Здравствуйте, коллеги.
Можете подсказать, есть данные ТЖ, из них нужно отобрать требуемые данные.

Не получается написать верное регулярное выражение.

Пишу в bash, так (пример упрощенный, по факту имею данные события ТЖ, ADMIN):
$ echo rphost_13556/24070415.log:08:52.586002-0,ADMIN,4,process=rphost--999 | sed 's/\(\/.+-\)/\1/'

Не отбирает нужное, а требуется вычленить данные между / и -.

Можно, конечно, выкусывать по частям, заменяя лишние данные на пробелы и т.п., но хочу сделать через обратные ссылки.
1 DoctorRoza
 
07.07.24
17:38
$ echo rphost_13556/24070415.log:08:52.586002-0,ADMIN,4,process=rphost--999 | sed -r 's/(\/.+-)/\1/'

так тоже не отрабатывает
2 kvk
 
07.07.24
23:50
3 kvk
 
07.07.24
23:52
Если только 's/(\/.+-\d,)' как-то задействовать.
4 vbus
 
08.07.24
08:11
echo "rphost_13556/24070415.log:08:52.586002-0,ADMIN,4,process=rphost--999" | awk -F'/' '{split($2, a, "-"); print a[1]}'
24070415.log:08:52.586002
7 DoctorRoza
 
08.07.24
11:05
Для grep'а можно задействовать ленивый квантор:
((?<=\/).+(?=-\d,))
Но в sed нет кванторов(((
8 DoctorRoza
 
08.07.24
11:17
(4) спасибо за пример. До awk только добрался для изучения
9 vbus
 
08.07.24
11:24
awk -F'/' '{split($2, a, "-"); print a[1]}'


Входящую строку делим по разделителю "/" (-F'/')
получается две строки $1,$2
$1="rphost_13556"
$2="24070415.log:08:52.586002-0,ADMIN,4,process=rphost--999"


Строку $2 делим по разделителю "-"
Помещаем в массив "a"
Печатаем первый элемент "a[1]"
10 Timon1405
 
08.07.24
12:07
грепом можно оставить совпадения с ленивым квантификатором , а потом убрать лишнее. чем проще выражения тем легче их поддерживать.
echo rphost_13556/24070415.log:08:52.586002-0,ADMIN,4,process=rphost--999 | grep -oP '\/.+?-' | sed 's/[-|\/]//g'
Основная теорема систематики: Новые системы плодят новые проблемы.