[Решено] Вытащить данные между символами ' '

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
Аватара пользователя
bars
Сообщения: 935
ОС: BSD/LINUX
Контактная информация:

[Решено] Вытащить данные между символами ' '

Сообщение bars »

Привет.

Код: Выделить всё

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 раз.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: вытащить данные между символами ' '

Сообщение Bizdelnick »

Потому что в шелле внутри одинарных кавычек экранирование не работает. Надо использовать двойные, и при этом не забывать экранировать обратные слеши, которые должны быть переданы sed.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 935
ОС: BSD/LINUX
Контактная информация:

Re: вытащить данные между символами ' '

Сообщение bars »

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',
...
...
...
);
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 901
ОС: debian, fedora (i3-wm)

Re: вытащить данные между символами ' '

Сообщение olecya »

Если это freeBSD, то ascii codes не работают как в линукс. Но есть одно колено. Не знаю какая у вас оболочка. Наример у меня ksh93:

Код: Выделить всё

echo $'\x27'
В bash тоже будет работать.

Код: Выделить всё

sed -n $'s/.*\x27\\(.*\\)\x27.*/\\1/p' file
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 935
ОС: BSD/LINUX
Контактная информация:

Re: вытащить данные между символами ' '

Сообщение bars »

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/
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 901
ОС: debian, fedora (i3-wm)

Re: вытащить данные между символами ' '

Сообщение olecya »

Код: Выделить всё

sed -n $'s%.*\x27\\(.*/\\)[^/]*\x27.*%\\1%p'  file
Не очень читаемо. Возможно лучше использовать awk. Сейчас попробую
Добавлено (21:07):

Код: Выделить всё

awk -F\' 'NF>1 {sub(/[^\/]*$/, "", $2); print $2}' file
Добавлено (21:18):
А вот что имел в виду Bizdelnick. И немного упростила алгоритм:

Код: Выделить всё

sed -n "s%.*'\\(.*\\)/.*%\\1%p" file
Спасибо сказали:
Ответить