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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Удаление всех символов кроме букв и цифр из имени файла (sed).  (Прочитано 2830 раз)

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

Оффлайн qpdb

  • Автор темы
  • Забанен
  • Активист
  • *
  • Сообщений: 628
  • xUbuntu 22.04
    • Просмотр профиля
Приветствую!
Время у нас непростое, можно и ответа не дождаться  :) но всё же!

Длительное время я производил замены в именах файлов используя приблизительно такое выражение.

echo './q↑w↓нПеАкВe€r®t™1¹2²™..,,;-_™™4⁴3³.txt'|sed -r "s:[^A-Za-zа-яА-Я0-9_/.]:_:g"
Но недавно обнаружил, что не все символы меняются на подчёркивание. Получается вот что:
./q_w_нПеАкВe_r_t™1¹2²™.._____™™4⁴3³.txt
Я кое что почитал и переделал команду:
echo './q↑w↓нПеАкВe€r®t™1¹2²™..,,;-_™™4⁴3³.txt'|sed "s:[^[:alnum:]_,./а-яА-Я]\+:_:g"
./q_w_нПеАкВe_r_t_1_2_..,,___4_3_.txt

Если у кого-то есть проверенная команда для решения подобной задачи прошу поделиться либо прокомментировать команду составленную мной. Должны оставаться буквы, в том числе кириллица, цифры ну и всё что потребуется ❰_,./а-яА-Я положим❱

Вроде всё работает, но хочется дополнительной ясности :idiot2:

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 7319
  • Luck Tales
    • Просмотр профиля
???

$: echo './q↑w↓нПеАкВe€r®t™1¹2²™..,,;-_™™4⁴3³.txt'|sed -r "s:[^A-Za-zа-яА-Я0-9_/.]:_:g"
./q_w_нПеАкВe_r_t_1_2__.._______4_3_.txt
А не, на другой машине
$: echo './q↑w↓нПеАкВe€r®t™1¹2²™..,,;-_™™4⁴3³.txt'|sed -r "s:[^A-Za-zа-яА-Я0-9_/.]:_:g"
./q_w_нПеАкВe_r_t™1¹2²™.._____™™4⁴3³.txt

баги наверно
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 18 Мая 2021, 23:22:21 от ALiEN175 »
🖥 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

Оффлайн qpdb

  • Автор темы
  • Забанен
  • Активист
  • *
  • Сообщений: 628
  • xUbuntu 22.04
    • Просмотр профиля
ALiEN175, спасибо…

Я вообще искренне думал, что SED «отлит в граните», однако судя по всему тоже находится в стадии постоянного развития :) !

У меня xUbuntu 20.04 и SED  соответственно
sed --version | grep -A2 'sed)'
sed (GNU sed) 4.7
Packaged by Debian
Copyright (C) 2018 Free Software Foundation, Inc.

А я искал причины где угодно, а вот версии не удосужился проверить и есть же в виртуальной машине другие системы :(

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 3149
    • Просмотр профиля
Пётр.

Оффлайн qpdb

  • Автор темы
  • Забанен
  • Активист
  • *
  • Сообщений: 628
  • xUbuntu 22.04
    • Просмотр профиля
Peter_I, это у меня просто из контекста вырван пример. А целиком задача выглядит примерно так.

Есть письма со спамом (я их должен изучать), файлы имеют примерно такой вид:
Fwd: Тренажер для Мозга в дар! осталось 7 штук ⚡⚡⚡.html
(1) New message - We have Trying To Reach You!__________________-------------------------------------------------------------------C0P7y.html

А нужно чтобы выглядели так:
Fwd_Тренажер_для_Мозга_в_дар_осталось_7_штук.html
1_New_message_We_have_Trying_To_Reach_You_C0P7y.html

В скрипте несколько команд, начальная
sed "s:[^[:alnum:]_./а-яА-Я]\+:_:g"Её задача убрать всё кроме букв, цифр, “_”, “.” “/”, при этом кириллица должна сохраняться.
Остальные «фильтры» убирают “_” в начале, “_” перед последней точкой, ну и так далее до приведенного выше вида.

Всё это делается «пакетно» скриптом консольного файлового менеджера RANGER над многими файлами сразу.

Сделать это при помощи только одной команды “tr” думаю не получится :(

 

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