Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: обрезать строку до нужного символа  (Прочитано 40457 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Zeka13

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1177
  • 18.10 Gnome x64 GTX 970
    • Просмотр профиля
обрезать строку до нужного символа
« : 17 Февраля 2012, 01:06:15 »
Выражение отлично обрезает до нужного символа строку

sed -r 's/^[^СИМВОЛ]+//'

Я новичёк в регепсах, не понимаю, как обрезать до символа /, пробую так, но не работает
sed -r 's/^[^\/]+//'

Укажите на ошибку, пожалуйста!
Если Wine - это костыль , то  Punto Switcher - это протез , а Daemon Tools инвалидное кресло.

andrey_p

  • Гость
Re: обрезать строку до нужного символа
« Ответ #1 : 17 Февраля 2012, 06:59:32 »
Не надо экранировать внутри квадратных скобок.

На будущее, когда спрашиваешь, всегда приводи пример, потому что любой (нормальный) ответ надо протестировать, и приходится самому вводить - не каждому это захочется. Тем более, что конкретно в твоем примере могут быть какие-то подводные камни.

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

sed -r 's!^[^/]+!!'
Можно даже (забавы ради):

sed -r 's ^[^/]+  '

Оффлайн Zeka13

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1177
  • 18.10 Gnome x64 GTX 970
    • Просмотр профиля
Re: обрезать строку до нужного символа
« Ответ #2 : 17 Февраля 2012, 12:36:48 »
я пробовал и без \
ваши коды тоже не работают
ну вот допустим
SourceDir=$(zenity --title "Выберите директорию с видео" --file-selection --directory)
echo $SourceDir | sed -r 's/^[^/]+//'
а если вместо / буква, то всё работает
Если Wine - это костыль , то  Punto Switcher - это протез , а Daemon Tools инвалидное кресло.

Оффлайн andrew_bye

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля
Re: обрезать строку до нужного символа
« Ответ #3 : 17 Февраля 2012, 13:46:29 »
sed -r 's!^[^/]+!!' - работает!

Поэтому echo $SourceDir | sed -r 's/^[^/]+//'
надо заменить на echo $SourceDir | sed -r 's!^[^/]+!!'

Оффлайн Vitsliputsli

  • Старожил
  • *
  • Сообщений: 1293
    • Просмотр профиля
Re: обрезать строку до нужного символа
« Ответ #4 : 17 Февраля 2012, 16:49:39 »
Все замечательно работает, он находит первый символ '/' и обрезает строку до него, тк первый символ пути это всегда '/', то собственно ничего и не изменяется.
Как я понимаю, хотелось получить только название директории без пути, тогда можно так:
sed 's|.*/||'
обрезает по последнему '/', а не по первому.

Оффлайн Zeka13

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1177
  • 18.10 Gnome x64 GTX 970
    • Просмотр профиля
Re: обрезать строку до нужного символа
« Ответ #5 : 17 Февраля 2012, 22:29:29 »
sed 's|.*/||'

так работает, спасибо большое!
Если Wine - это костыль , то  Punto Switcher - это протез , а Daemon Tools инвалидное кресло.

andrey_p

  • Гость
Re: обрезать строку до нужного символа
« Ответ #6 : 18 Февраля 2012, 13:08:56 »
Вот всегда давайте пример реальных данных, с которыми работаете. Не знаю то, но очень похоже: сейчас буквально попробовал вырезать куски текста в кодировке cp1251 в Linuxе - sed не берет, молча пропускает через себя, а perl, с аналогичный регэксом, справляется.

А куски в начале строк и выражение совершенно одинаковое -  's/^[^,]+,//' 

Оффлайн Dexel

  • Активист
  • *
  • Сообщений: 295
    • Просмотр профиля
Re: обрезать строку до нужного символа
« Ответ #7 : 16 Июля 2014, 10:54:26 »
Синтаксисом баш как сие получить?

Вот решение вместо всех выше:
echo '1024x768' | cut -dx -f 1
А синтаксис баша кто знает?
Наверняка есть конструкция с использованием #, ##, %, %%
Чтоб получить 768 из данного примера, то вот так:
size_xy='1024x768'
echo ${size_xy#*x}

А как первое получить(1024), на синтаксисе баш?
« Последнее редактирование: 16 Июля 2014, 10:57:20 от Dexel »

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12139
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: обрезать строку до нужного символа
« Ответ #8 : 16 Июля 2014, 11:08:41 »
yazu, если данные в cp1251 то и окружение команды нужно настроить в эту кодировку - тогда работать будет. По умолчанию в Ubuntu стоит utf8 и всякие cp1251 - это просто белиберда для системы, набор байт (если там есть что-то отличное от кодов меньше чем 128).
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: обрезать строку до нужного символа
« Ответ #9 : 16 Июля 2014, 11:25:28 »
size_xy='1024x768'
echo ${size_xy#*x}
А как первое получить(1024), на синтаксисе баш?
echo ${size_xy%x*}
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Dexel

  • Активист
  • *
  • Сообщений: 295
    • Просмотр профиля
Re: обрезать строку до нужного символа
« Ответ #10 : 16 Июля 2014, 16:23:02 »
Ага, спасибо!

 

Страница сгенерирована за 0.016 секунд. Запросов: 22.