LINUX.ORG.RU

Удаление ненужных символов-значков в shell

 ,


2

1

Есть строчка вида:«Бесплатное электричество ⚡😨😃 СВОБОДНАЯ ЭНЕРГИЯ потока воды. Гидро электростанция_ZnMKCINf05k.3gp» Как удалить все эти значки (⚡😨😃 и т.д.) оставив токо нормальный текст с знаками препинания (.,—...)?

Фантазия закончилась на:

sed 's/[[:cntrl:]]//g' /tmp/tmp/name

На правах «оригинала» (но сработает, кстати):

iconv -c -t koi8-r /tmp/tmp/name | iconv -f koi8-r

Пример:

% echo "Бесплатное электричество ⚡😨😃 СВОБОДНАЯ ЭНЕРГИЯ потока воды. Гидро электростанция_ZnMKCINf05k.3gp" | iconv -c -t koi8-r | iconv -f koi8-r
Бесплатное электричество  СВОБОДНАЯ ЭНЕРГИЯ потока воды. Гидро электростанция_ZnMKCINf05k.3gp

P. S. cast saahriktu. Тут кто-то упомянул koi8-r. Пили тему!

Psych218 ★★★★★
()
Ответ на: комментарий от Psych218

Ну а так вообще не совсем очевидно, какие знаки препинания считать нормальными, до какой степени обрезать. Можно просто перечислить, что ты хочешь оставить, вот так:

export GOOD_SYMBOLS='А-Яа-яA-Za-z0-9.,?!«"»—_: -'
sed "s/[^$GOOD_SYMBOLS]*//g" /tmp/tmp/name
Psych218 ★★★★★
()

sed

Не нужен.

[:cntrl:]

Cf. «control characters».

Как

$ s='Бесплатное электричество ⚡😨😃 СВОБОДНАЯ ЭНЕРГИЯ потока воды. Гидро электростанция_ZnMKCINf05k.3gp'
$ echo "${s//[^[:alnum:][:ascii:]]/}"
Бесплатное электричество СВОБОДНАЯ ЭНЕРГИЯ потока воды. Гидро электростанция_ZnMKCINf05k.3gp

Дополнить по вкусу.

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)

на правах мимокрокодил:

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <locale.h>

int main()
{
    setlocale(LC_ALL,"");
    wchar_t buffer[4096];
    fgetws(buffer,sizeof(buffer),stdin);
    for(int i = 0; buffer[i] != L'\0' ;i++)
    {
        if(buffer[i] >= L'А' && buffer[i] <= L'Я' )
        {
            putwchar(buffer[i]);
        };
        if(buffer[i] >= L'а' && buffer[i] <= L'я' )
        {
            putwchar(buffer[i]);
        };
        if(buffer[i] >= L'A' && buffer[i] <= L'Z' )
        {
            putwchar(buffer[i]);
        };
        if(buffer[i] >= L'a' && buffer[i] <= L'z' )
        {
            putwchar(buffer[i]);
        };
        if(buffer[i] == L',' || buffer[i] == L'.' ||
           buffer[i] == L'-' || buffer[i] == L'_' ||
           buffer[i] == L' ' )
        {
            putwchar(buffer[i]);
        }
        if(buffer[i] >= L'0' && buffer[i] <= L'9' )
        {
            putwchar(buffer[i]);
        };
    };
    putwchar(L'\n');

    return 0;
}

...
dron@gnu:~$ gcc re.c -o ren 
dron@gnu:~$ echo "Бесплатное электричество ⚡😨😃 СВОБОДНАЯ ЭНЕРГИЯ потока воды. Гидро электростанция_ZnMKCINf05k.3gp" | ./ren 
Бесплатное электричество  СВОБОДНАЯ ЭНЕРГИЯ потока воды. Гидро электростанция_ZnMKCINf05k.3gp
dron@gnu:~$ 

Dron ★★★★★
()
Ответ на: комментарий от Weres

А isalpha вам чем не угодила?

Тогда уж iswalpha. Не знаю, я даже не вспомнил про неё с просони.

UPDATE: По идее там могут быть символы письменности типа иероглифы и т.п. не в качестве информации, а для украшения как и смайлики и тогда iswalpha лишняя. А тут жёсткая фильтрация 2x алфавитов и нескольких разделителей с цифрами.

Dron ★★★★★
()
Последнее исправление: Dron (всего исправлений: 2)

«Бесплатное электричество ⚡😨😃 СВОБОДНАЯ ЭНЕРГИЯ потока воды. Гидро электростанция_ZnMKCINf05k.3gp»

Где ты это взял?
Ютубчик, KREONAN что ли?

awesomelackware
()
Ответ на: комментарий от Psych218

iconv -c -t koi8-r /tmp/tmp/name | iconv -f koi8-r

Отлично. Правда пришлось компилить iconv.

export GOOD_SYMBOLS='А-Яа-яA-Za-z0-9.,?!««»—_: -'
sed „s/[^$GOOD_SYMBOLS]*//g“ /tmp/tmp/name

Да я пробовал, но мой sed из busybox не воспринимает кирилицу.

$ echo »${s//[^[:alnum:][:ascii:]]/}"

Тут shell и такое не работает.

на правах мимокрокодил:

как альтернатива для суровых програмистов, которым я не являюся

Где ты это взял?
Ютубчик, KREONAN что ли?

KREOSAN, делаю shell качалку видео с ютуба и столкнулся с повреждением имени файла с таким именем.

VINRARUS
() автор топика
Ответ на: комментарий от RazrFalcon

Божечки

Мне это лестно, но спасибо :D

сишка то тут зачем?

Внезапно она оказалась бы к стати так как читай ниже.

Отлично. Правда пришлось компилить iconv.
но мой sed из busybox не воспринимает кирилицу
Тут shell и такое не работает.

Dron ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.