На самом деле это единственный раздел про unix на этом форуме
Модераторы: /dev/random , Модераторы разделов
bars
Сообщения: 725
ОС: BSD/LINUX
Сообщение
bars » 24.10.2022 18:29
Привет.
Код: Выделить всё
head /var/www/site/site.kz/cron/image/b_file.php
<?php
return array (
4075 => 'iblock/cfd/239500_t_new_14_thum47.jpg',
4076 => 'iblock/911/wc_ringflutes_14_thumb19.mvf',
...
...
...
);
пытаюсь вытащить данные что находятся в ' ' . iblock/cfd/239500_t_new_14_thum47.jpg
Код: Выделить всё
sed 's/\'\(.*\)\'/\1/' /var/www/site/site.kz/cron/image/b_file.php
> '
sed: -e expression #1, char 13: unknown option to `s'
Почему не работает?
Последний раз редактировалось bars 25.10.2022 10:48, всего редактировалось 1 раз.
Bizdelnick
Модератор
Сообщения: 20044
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 24.10.2022 20:09
Потому что в шелле внутри одинарных кавычек экранирование не работает. Надо использовать двойные, и при этом не забывать экранировать обратные слеши, которые должны быть переданы sed.
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
bars
Сообщения: 725
ОС: BSD/LINUX
Сообщение
bars » 24.10.2022 20:23
Bizdelnick писал: ↑ 24.10.2022 20:09
Потому что в шелле внутри одинарных кавычек экранирование не работает. Надо использовать двойные, и при этом не забывать экранировать обратные слеши, которые должны быть переданы sed.
Попробовал двойные ковычки, но тогда просто показывается весь файл.
Код: Выделить всё
sed "s/\'\(.*\)\'/\1/" /var/www/site/site.kz/cron/image/b_file.php
<?php
return array (
4075 => 'iblock/cfd/239500_t_new_14_thum47.jpg',
4076 => 'iblock/911/wc_ringflutes_14_thumb19.mvf',
...
...
...
);
olecya
Сообщения: 855
ОС: debian, fedora (i3-wm)
Сообщение
olecya » 24.10.2022 20:30
Если это freeBSD, то ascii codes не работают как в линукс. Но есть одно колено. Не знаю какая у вас оболочка. Наример у меня ksh93:
В bash тоже будет работать.
Код: Выделить всё
sed -n $'s/.*\x27\\(.*\\)\x27.*/\\1/p' file
bars
Сообщения: 725
ОС: BSD/LINUX
Сообщение
bars » 24.10.2022 20:31
olecya писала: ↑ 24.10.2022 20:30
sed -n $'s/.*\x27\\(.*\\)\x27.*/\\1/p' file
Спасибо.
Добавлено (20:48):
А как можно вытащить только названия директорий?
к примеру есть директории 2 го и 3 го уровня, возможно в дальнейшем и 4-го уровня.
Код: Выделить всё
iblock/cfd/
iblock/4d/545454dfdf54/
iblock/qwd/54fdf54/ad1/
olecya
Сообщения: 855
ОС: debian, fedora (i3-wm)
Сообщение
olecya » 24.10.2022 21:02
Код: Выделить всё
sed -n $'s%.*\x27\\(.*/\\)[^/]*\x27.*%\\1%p' file
Не очень читаемо. Возможно лучше использовать awk. Сейчас попробую
Добавлено (21:07):
Код: Выделить всё
awk -F\' 'NF>1 {sub(/[^\/]*$/, "", $2); print $2}' file
Добавлено (21:18):
А вот что имел в виду
Bizdelnick . И немного упростила алгоритм: