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


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

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

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

Оффлайн qpdb

  • Автор темы
  • Участник
  • *
  • Сообщений: 103
  • xUbuntu 20.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:

Оффлайн ALiEN175

  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4712
  • Capture the truth
    • Просмотр профиля
???

$: 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 »
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн qpdb

  • Автор темы
  • Участник
  • *
  • Сообщений: 103
  • xUbuntu 20.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

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

Оффлайн qpdb

  • Автор темы
  • Участник
  • *
  • Сообщений: 103
  • xUbuntu 20.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.073 секунд. Запросов: 25.