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


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Как удалить часть текста начиная с первого знака / до знака ,  (Прочитано 334 раз)

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

Оффлайн ase66

  • Автор темы
  • Участник
  • *
  • Сообщений: 194
    • Просмотр профиля
Как корректно удалить часть текста начиная с конца каждой отдельной строки с первого попавшегося знака / и до первого же знака , (запятая)?
Весь текст в столбик, каждая строка отдельно. В каждой строке есть несколько / и ,

Количество символов всегда разное. Есть и пробелы. Но если проблема с пробелам, то этим можно пренебречь. Главное чтобы основной массив был отработан.

Оффлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 7994
    • Просмотр профиля
ABS
Цитировать
${string%substring}
Удаление самой короткой, из найденных, подстроки $substring в строке $string. Поиск ведется с конца строки
...

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 7820
  • We were here
    • Просмотр профиля
Пример строки и желаемый результат предоставьте, а то я что-то не распарсил.
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн F12

  • Администратор
  • Старожил
  • *
  • Сообщений: 5671
    • Просмотр профиля
ase66, может вот это обсуждение как-то пригодится в решении твоей такой "непростой задачи"  ::)

Оффлайн ase66

  • Автор темы
  • Участник
  • *
  • Сообщений: 194
    • Просмотр профиля
Есть:

DBDesigner,wine-Programs-dbdesigner-win-u-DBDesigner41,/opt/winux/hotpot/appstore/dbdesigner-win-u-4.0.5.6nfs1/hicolor/apps/dbdesigner-win-u.png,/opt/winux/hotpot/appstore/dbdesigner-win-u-4.0.5.6nfs1/hicolor/apps/dbdesigner-win-u.png

Надо:

DBDesigner,wine-Programs-dbdesigner-win-u-DBDesigner41,/opt/winux/hotpot/appstore/dbdesigner-win-u-4.0.5.6nfs1/hicolor/apps/dbdesigner-win-u.png,dbdesigner-win-u.png


Нужно удалить (начиная с конца строки) это:

/opt/winux/hotpot/appstore/dbdesigner-win-u-4.0.5.6nfs1/hicolor/apps/


Строк от 5000 до 60000, а у меня 3 часа уходит на 300. Очень хочется автоматизировать это дело.
« Последнее редактирование: 04 Июля 2025, 14:45:46 от ase66 »

Оффлайн takefive

  • Новичок
  • *
  • Сообщений: 41
  • harp
    • Просмотр профиля
out=./output.txt
while IFS= read -r line; do
  str=${line%,*},${line##*/}
  echo $str >> $out
done < input.txt
« Последнее редактирование: 04 Июля 2025, 17:04:45 от takefive »
без свинга нет музыки

Оффлайн ase66

  • Автор темы
  • Участник
  • *
  • Сообщений: 194
    • Просмотр профиля
Большое спасибо! Отличное решение. Осталась правда запятая, но она ещё может мне пригодиться в будущем.

Удалить последний знак (в моём случае) можно так:

rev output.txt | cut -c 2- | rev > output2.txt

Оффлайн artemu88

  • Участник
  • *
  • Сообщений: 122
    • Просмотр профиля
ase66, еще вариант Вам, если все правильно понял.
#!/usr/bin/bash
[ "$#" -ne 2 ] && echo "usage: this_script_name <file_to_subst> <dest_file>" && exit 1
output_file="$2"
input_file="$1"
while read line; do
    echo ${line} | sed -E 's:\,\/.+\/:\/:' >> ${output_file}
done < ${input_file}
echo "All done!"

подправил код (потом уже увидел, что не до конца строки, а до полседнего слеша)
« Последнее редактирование: 04 Июля 2025, 19:18:21 от artemu88 »

 

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