• Как прописать регулярное выражение для замены в Notepad++?

    erge
    @erge
    Примус починяю
    поиск ^(\s*?\$[^=]+=\s*explode.*?)\);$
    замена \1 ?? '');

    см. пример

    UPDATE
    поиск ^(\s*?\$[^=]+= *explode.*?)\);
    см. пример

    UPDATE2
    сделать такое....
    поиск ^(\s*?\$[^=]+= *explode.*?)(\);)
    замена \1 ?? ''\2
    Ответ написан
  • Как удалить повторяющиеся строки с IP более N раз?

    erge
    @erge
    Примус починяю
    UPDATE:
    Через регулярку можно, если предварительно отсортировать строки

    В Notepad++ есть следующие операции:

    Сортировка:
    выбрать в меню
    En - Edit -> Line Operations -> Sort Lines Lexicographically Ascending
    Ru - Правка -> Операции со Строками -> Сортировка по возрастанию (По первой цифре)

    Удаление дубликатов:
    выбрать в меню
    En - Edit -> Line Operations -> Remove Consecutive Duplicate Lines
    Ru - Правка -> Операции со Строками -> Удалить последовательные дубликаты строк


    Через регулярку - сначала сортируем список (как описано выше), затем делаем замену через регулярку:
    Найти: (\d+\.\d+\.\d+\.\d+:\d+[\r\n]*)(?:\1)+
    Заменить на: \1

    Это удалит все дубликаты
    см. пример на regex101

    Если необходимо N-раз, то
    Найти: (\d+\.\d+\.\d+\.\d+:\d+[\r\n]*)(?:\1){2,}
    Заменить на: \1

    где цифра в фигурных скобах = N-1
    см. пример на regex101

    см. так же Регулярные выражения в Notepad++ готовые примеры, и т.п. в гуглояндексе...

    так же удаление дубликатов можно сделать через варианты:
    • в Notepad++сначала сортируем все строки, затем удаляем дубликаты, см. выше пункты меню
    • в bash сделать
      cat ip.lst | sort | uniq

    • использовать MS Excel (LibreOffice и т.п.), см. Yandex - Excel удалить дубликаты

    Ответ написан
  • Как подключиться к БД на oracle VM virtualbox c основной ОС?

    erge
    @erge
    Примус починяю
    А почему у вас во втором Rule 2 стоит IP 192.168.122.1 а не 10.0.2.15 если по 10.0.2.15 соединяется на SSH гостя ???

    UPD:
    В SQL Developer необходимо указать непосредственно порт подключения 1520, т.к. он отличается от стандартного, либо в правиле указать портфорвардинг один к одному 1521 на 1521, если конечно на хосте этот порт свободен.
    Ответ написан
  • Как по полю дататайм посчитать 90ый процентиль?

    erge
    @erge
    Примус починяю
    Не знаю почему у вас не работает!? percentile_disc нормально работает непосредственно с datetime :

    SELECT
      dt,
      DATEADD(MILLISECOND, pctcont_90_dt % 1000, DATEADD(SECOND, pctcont_90_dt / 1000, '19700101')) AS pctcont_90_dt,
      pctdisc_90_dt
      FROM (
        SELECT
          dt,
          CAST(
            percentile_cont(.90)
              WITHIN GROUP (ORDER BY (datediff_big(MS, '1970-01-01', dt)))
              OVER()
            AS BIGINT
          )
            AS pctcont_90_dt,
          percentile_disc(.90)
            WITHIN GROUP (ORDER BY dt) over()
            AS pctdisc_90_dt
        FROM test
      ) t
    ;


    см. пример на dbfiddle
    см. также percentile_disc vs percentile_cont
    Ответ написан
    Комментировать
  • Как "убить" и закрыть tmux через 10 минут?

    erge
    @erge
    Примус починяю
    ## запускаем tmux и отправляем его в фон, добавив в конце строки &
    ## где ... - это ваши параметры запуска tmux
    tmux ... &
    
    ##  ждем 610 сек и прибиваем tmux
    sleep 610 && killall -9 tmux


    UPD:
    если надо убить конкретный tmux, то в скрипте с вызовом tmux пишем...

    #!/bin/bash
    tmux new-session \; \
      send-keys 'htop' C-m \; \
      split-window -v -p 75 \; \
      split-window -h -p 30 \; \
     send-keys 'watch -n1 sensors' C-m \; \
      select-pane -t 1 \; \
      split-window -h   \; \
      send-keys './disk.sh' C-m \; \
      split-window -v -p 20 \; \
      send-keys './stress.sh' C-m \; &
    
    sleep 610 && kill -9 $!


    PS: обратите внимание, что в конце команды tmux стоит амперсанд - &
    Ответ написан
    9 комментариев
  • Можно ли посчитать количество пар с помощью sql запроса?

    erge
    @erge
    Примус починяю
    Результат больше похож на количество дублирующихся записей, а не на количество пар, потому что по количеству пар результат будет такой:

    столбец1  столбец2  результат
    фф           123            1
    фф           456            0
    йцу          123            0


    так как все же не понятно что вам необходимо, вот несколько вариантов:

    -- количество дублирующихся записей
    SELECT столбец1, столбец2, count(*)
      FROM таблица
      GROUP BY столбец1, столбец2;
    
    -- количество ПАР!!
    SELECT столбец1, столбец2, count(*) div 2
      FROM таблица
      GROUP BY столбец1, столбец2;
    
    -- если необходимо именно как в вопросе (количество дублирующихся записей):
    SELECT t1.столбец1, t1.столбец2, cnt AS результат
      FROM таблица t1
      JOIN (
      SELECT столбец1, столбец2, count(*) cnt
      FROM таблица
      GROUP BY столбец1, столбец2) t2 ON t2.столбец1 = t1.столбец1
                                     AND t2.столбец2 = t1.столбец2
    ;
    
    -- если необходимо именно как в вопросе (КОЛИЧЕСТВО ПАР!!):
    SELECT t1.столбец1, t1.столбец2, cnt div 2 AS результат
      FROM таблица t1
      JOIN (
      SELECT столбец1, столбец2, count(*) cnt
      FROM таблица
      GROUP BY столбец1, столбец2) t2 ON t2.столбец1 = t1.столбец1
                                     AND t2.столбец2 = t1.столбец2
    ;


    см. пример на dbfiddle

    PS: т.к. вы не указали СУБД, пример написан для MySQL 8
    для SQL Server div надо заменить на обычный оператор /
    для Oracle count(*) div 2 надо заменить на CEIL(count(*) / 2)
    и должно работать.
    Ответ написан
    Комментировать
  • Удалить запрещённое слово, но ошибка, как исправить?

    erge
    @erge
    Примус починяю
    как-то так:

    if (message.text  is not None and bad_words[f] in message.text.lower()  or
        message.photo is not None and bad_words[f] in message.caption.lower() or
        message.video is not None and bad_words[f] in message.caption.lower()):
        await bot.delete_message(message.chat.id, message.message_id)
        break


    UPDATE:
    Поправил ответ в соответствии с комментарием o5a
    Ответ написан
  • Можно ли удалить с помощью регулярного выражения все не UNICODE символы из колонки?

    erge
    @erge
    Примус починяю
    ну, если задача стоит почистить именно UNICODE!? это строка вида
    \u0442\u0435\u043a\u0441\u0442\u0020\u0432\u0020\u044e\u043d\u0438\u043a\u043e\u0434


    то примерно как-то так:

    поиск
    (\\u[0-9a-zA-Z]{4})(?!\\u[0-9a-zA-Z]{4}).*?(\\u[0-9a-zA-Z]{4})
    замена на
    \1\2

    см. пример на regex101

    import re
    
    regex = r"(\\u[0-9a-zA-Z]{4})(?!\\u[0-9a-zA-Z]{4}).*?(\\u[0-9a-zA-Z]{4})"
    
    test_str = ("\\u0442\\u0435\\u043a\\u0441\\u0442\\u0020\\u0432\\u0020\\u044e\\u043d\\u0438\\u043a\\u043e\\u0434\n\n"
    	"\\u0442\\u0435dsds\\n\\u043a\\u0441\\u0442das\\u0020\\u0432dsdddddd\\u0020\\u044e\\u043d\\n\\n\\n\\u0438\\u043a\\u043e\\u0434")
    
    subst = "\\1\\2"
    
    # You can manually specify the number of replacements by changing the 4th argument
    result = re.sub(regex, subst, test_str, 0)
    
    if result:
        print (result)


    см. пример python

    PS: Unicode != UTF-8 charset
    это не одно и то же.
    Ответ написан
    Комментировать
  • Как задать в Jquery чтобы минусовало не менее чем переменная?

    erge
    @erge
    Примус починяю
    Я так понимаю что в $('.knopka1') лежит "суммарная" цена = прайс * кол-во, тогда так и считать, а кол-во ограничивается снизу единицей.

    $('.quantity_inner .bt_minus').click(function() {
        let $input = $(this).parent().find('.quantity');
        let $val   = $('.knopka1');
        let count = parseInt($input.val()) - 1;
        count = count < 1 ? 1 : count;
        let price_val = parseFloat($val.data('price'));
        let curr_val = count * price_val;
        $input.val(count);
        $val.text(curr_val);
    });
    Ответ написан
    Комментировать
  • PHP как правильно написать регулярное выражение для обработки url?

    erge
    @erge
    Примус починяю
    https:\/\/site.ru\/[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}\/$


    пример на regex101
    Ответ написан
    Комментировать
  • Как отфильтровать таблицу по столбцу значение которого входит/не входит в список значений?

    erge
    @erge
    Примус починяю
    SELECT *
      FROM [dbo].[data]
      WHERE ( @p1 = 0 AND [dbo].[data].[intField] NOT IN (0,1,2,8,9) )
         OR ( @p1 = 1 AND [dbo].[data].[intField]     IN (0,1,2,8,9) )
    Ответ написан
    Комментировать
  • Как сделать выборку из одной таблицы и сгруппировать по колонке?

    erge
    @erge
    Примус починяю
    Просто джойнишь таблицу саму с собой и для каждой "таблицы" в where пишешь field_name = 'longitude'и field_name = 'latitude'

    select
        lng.object_id,
        ltd.value as latitude,
        lng.value as longitude
      from obj_table lng, obj_table ltd
      where lng.field_name = 'longitude'
        and ltd.field_name = 'latitude'
        and lng.object_id = ltd.object_id
    ;


    см. пример на dbfiddle

    UPDATE:

    еще можно так:
    select
        object_id,
        max(case field_name when 'latitude' then value else null end) as latitude,
        max(case field_name when 'longitude' then value else null end) as latitude,
        max(case field_name when 'category' then value else null end) as category
      from obj_table
      group by object_id;


    или еще...
    собрать строки в json, а затем извлечь обратно нужные поля...

    -- собираем в json:
    select
        object_id,
    	cast(replace(group_concat(json_object(field_name,value)),'},{',',') as json) json_obj
      from obj_table
      group by object_id
    ;
    
    -- или так:
    select
        object_id,
        cast(concat('{',group_concat( concat('"',field_name,'":"',value,'"') separator ',' ), '}') as json) as json_obj
      from obj_table
      group by object_id
    ;
    
    -- извлекаем поля из json:
    select
        object_id,
        json_extract(json_obj,'$.latitude') as latitude,
        json_extract(json_obj,'$.longitude') as latitude,
        json_extract(json_obj,'$.category') as category
      from (
    select
        object_id,
        cast(replace(group_concat(json_object(field_name,value)),'},{',',') as json) json_obj
      from obj_table
      group by object_id
      ) t
    ;


    см. пример на dbfiddle

    PS: JSON работает начиная с версии 5.7
    Ответ написан
    Комментировать
  • Как получить название и 'картинку' из БД?

    erge
    @erge
    Примус починяю
    Нет связи между таблицами file_managed или field_revision_field_image с таблицей node, поэтому у вас получается декартово произведение.
    состоящее в перечислении через запятую табличных выражений в предложении FROM (таблицы, представления, подзапросы) при отсутствии предложения WHERE, связывающего столбцы из перечисленных источников строк
    (см.)
    в настоящее время у вас только одна связь по типу 'article' и этого очевидно недостаточно.
    Ответ написан
    Комментировать
  • Как запрос к mysql переделать по sqlite?

    erge
    @erge
    Примус починяю
    И почему вы думаете что это должно работать в SQLite? Разные БД, разный синтаксис, разные функции в том числе работы с датами...

    в ошибке явное указание в чем проблема:

    Error: near "DAY": syntax error

    нет такого в принципе в SQLite

    смотрите функции работы с датами в SQLite!
    date функция SQLite

    т.е. в итого вместо
    DATE(DATE_ADD(NOW(), INTERVAL -3 DAY))

    надо:
    date ( 'now', '-3 day')

    PS: между - и 3 пробелов быть не должно, SQLite этого не понимает и возвращает результатом date - null !? но почему-то во многих примерах пишут с пробелом!??
    Ответ написан
    Комментировать
  • Как вывести всю строку в FOR..IN не перечисляя вручную столбцы?

    erge
    @erge
    Примус починяю
    DECLARE
        l_sql        VARCHAR2(32767):='
          SELECT 1 field_11, ''river'' field_22 FROM DUAL
          UNION ALL
          SELECT 1 field_11, ''sharf'' field_22 FROM DUAL
        ';
        l_cur        PLS_INTEGER := DBMS_SQL.OPEN_CURSOR;
        l_ind        PLS_INTEGER;
        l_col_count  PLS_INTEGER;
        l_col_names  DBMS_SQL.DESC_TAB;
        l_out        VARCHAR2(32767);
        col_val_chr  VARCHAR2(32767);
        LNBR         VARCHAR2(2)  := CHR(13)||CHR(10);
        col_delim    VARCHAR2(20) := '</td><td>';
        row_delim    VARCHAR2(20) := '</td></tr>'|| LNBR ||'<tr><td>';
    BEGIN
        -- Разбор запроса
        DBMS_SQL.PARSE (
          l_cur,
          l_sql,
          DBMS_SQL.NATIVE
        );
        -- Получение информации о столбцах
        DBMS_SQL.DESCRIBE_COLUMNS (l_cur, l_col_count, l_col_names);
        -- Вывод каждого из имен столбцов
        FOR col_ind IN 1 .. l_col_count
        LOOP
            -- Определим тип столбца
            DBMS_SQL.DEFINE_COLUMN(l_cur, col_ind, col_val_chr, 32767);
            -- Выводим наимнование столбца
            l_out := l_out || l_col_names(col_ind).col_name;
            -- Если не последний эл. вставляем разделитель
            IF col_ind != l_col_count
            THEN
                l_out := l_out || col_delim;
            END IF;
        END LOOP;
    
        -- Выполняем и фетчим курсор
        l_ind := DBMS_SQL.EXECUTE (l_cur);
        LOOP
            l_ind := DBMS_SQL.FETCH_ROWS( l_cur );
            EXIT WHEN l_ind = 0;
    
            l_out := l_out || row_delim;
    
            FOR col_ind IN 1 .. l_col_count
            LOOP
                -- Читаем и выводим значение
                DBMS_SQL.COLUMN_VALUE (l_cur, col_ind, col_val_chr);
                l_out := l_out || col_val_chr;
                -- Если не последний эл. вставляем разделитель
                IF col_ind != l_col_count
                THEN
                    l_out := l_out || col_delim;
                END IF;
            END LOOP;
        END LOOP;
        DBMS_SQL.CLOSE_CURSOR (l_cur);
        DBMS_OUTPUT.PUT_LINE('<table>'||LNBR||'<tr><td>'|| l_out ||'</td></tr>'||LNBR||'</table>');
    END;
    /
    
    /*
        -- Если задать разделители полей ; и LNBR то на выходе получим CSV данные
        col_delim    VARCHAR2(20) := ';';
        row_delim    VARCHAR2(20) := LNBR;
    */


    см. пример на dbfiddle

    PS: Вы видимо что-то недочитали :)
    Спасибо, сам разобрался, даже и не знал что так можно, теперь наверно буду использовать :)

    UPDATE:
    Можно обернуть в функцию и помимо прочего передавать в нее тип разделителя (для HTML можно передавать стили или classname для таблицы) и на выходе иметь разный формат данных.
    Ответ написан
    Комментировать
  • Как узнать количество совпадающих значений из двух разных таблиц?

    erge
    @erge
    Примус починяю
    какая СУБД !?
    У разных СУБД свои методы/функции работы с датами, а я так понимаю у вас хранится дата+время!?
    да и синтаксис SQL тоже бывает особенный...

    если предположить что это MySQL , то использовать функцию DATE() для извлечения даты.
    PS: ну либо сами перепишете соответственно

    через INNER JOIN

    SELECT count(DISTINCT c.user_id) AS first_day_order
      FROM clients c
      INNER JOIN orders o ON c.user_id = o.user_id
      WHERE DATE(c.registered_datetime) = DATE(o.when_start)
        AND DATE(c.registered_datetime) BETWEEN '2021-09-01' AND '2021-09-30'
    ;


    или через EXISTS

    SELECT count(c.user_id) AS first_day_order
      FROM clients c
      WHERE DATE(c.registered_datetime) BETWEEN '2021-09-01' AND '2021-09-30'
        AND EXISTS (
              SELECT 1 FROM orders o
                WHERE c.user_id = o.user_id
                  AND DATE(c.registered_datetime) = DATE(o.when_start)
            )
    ;
    Ответ написан
    Комментировать
  • Какие есть VDS/VPS с оплатой криптой?

    erge
    @erge
    Примус починяю
    Поиск VPS

    например при ордере на time4vps.com
    в способах оплаты пишут:
    Credit Card, PayPal, PayPal Billing Agreement, Alipay, Bitcoins and Altcoins, Bank Transfer
    Ответ написан
  • Как в sed сделать несколько последовательных замен?

    erge
    @erge Автор вопроса
    Примус починяю
    в принципе разобрался...

    после команд
    :a;N;$!ba
    весь текст становится одной строкой, поэтому немного по другому надо регулярки, см. ниже:
    sed '/title/d
         :a;N;$!ba
         s/ \{2,\}//g
         s#\s*</td>\s*</tr>\s*<tr>\s*<td>\s*#\n#g
         s#\s*</td>\s*<td>\s*#;#g
         s/<[^>]\+>//g
         s/\n\{2,\}//g' /dev/shm/ex01.html


    UPDATE

    конечный вариант в итоге такой:
    ### Convert HTML to CSV
    sed ':a;N;$!ba
         s/<html.\+<table[^>]\+>//Ig
         s#\s*</td>\s*</tr>\s*<tr>\s*<td>\s*#\n#Ig
         s#\s*</td>\s*<td>\s*#;#Ig
         s/<[^>]\+>//g;s/\s\{2,\}//g' somreport.html


    пример здесь
    Ответ написан
    Комментировать
  • Как преобразовать число для прибавления?

    erge
    @erge
    Примус починяю
    но при попытке прибавить в переменную total_price price он говорит что нужен float но с ним у меня total_price слишком другой изза того что он превращает 0.3275 в 0

    Это не "флоат" превращает 0.3275 в 0, а int

    может все-таки вместо int(item['price']) написать float(item['price']) ?
    Ответ написан
    Комментировать