Ответы пользователя по тегу bash
  • Конвертировать px в rem с помощью bash скрипта?

    erge
    @erge
    Примус починяю
    зачем это делать на bash с включением grep, sed и awk, когда все можно сделать на одном awk:

    awk -F: '
    /\{|\}|border|max-width|^$/ { print $0 }
    !/\{|\}|border|max-width|^$/ {
      split( substr($2, 1, length($2)-1) , a," ");
      res = "";
      for (i in a) {
        ind = match(a[i], /[0-9]+px/)
        if (ind != 0) {
          a[i] = sprintf ("%.2frem", a[i]/10);
        }
        res=a[i] " " res;
      }
      res = substr(res, 1, length(res)-1);
      print $1 ": " res ";"
    }
    ' some.css


    см. пример на awk.js.org

    UPDATE:
    заметил что значения перемешиваются (могут перемешиваться когда их 4 и более), это происходит ввиду того что массивы в awk ассоциативные и поэтому при переборе через for in они могут случайно перемешаться.
    Arrays in awk are different—they are associative. This means that each array is a collection of pairs—an index and its corresponding array element value...
    The pairs are shown in jumbled order because their order is irrelevant.

    см. 8.1.1 Introduction to Arrays

    переписал на перебор индексов и немного "оптимизировал", убрал форматирование %.2f т.к. при делении на 10 оно не нужно...
    awk -F: '{
    if ($0 ~ /\{|\}|border|max-width|^$/ ) { print $0 }
    else {
      res = "";
      split( substr($2, 1, length($2)-1) , a, " ");
      for (i=1; i<= length(a);i++) res = res " " ((match(a[i], /[0-9]+px/) != 0)? a[i]/10"rem" : a[i]);
      print $1 ": " res";"
    }
    }' some.css
    Ответ написан
    2 комментария
  • Как с помощью sed в bash конвертировать className из camelCase в dash?

    erge
    @erge
    Примус починяю
    например как-то так:
    sed -r '
    s/(className="[^"]+)([A-Z])([^"]+)([A-Z])([^"]+)([A-Z])([^"]+")/\1-\L\2\3-\L\4\5-\L\6\7/g;
    s/(className="[^"]+)([A-Z])([^"]+)([A-Z])([^"]+")/\1-\L\2\3-\L\4\5/g;
    s/(className="[^"]+)([A-Z])([^"]+")/\1-\L\2\3/g
    ' input_file > output_file


    или вот так, во всех файлах по маске:
    sed -i -r '
    s/(className="[^"]+)([A-Z])([^"]+)([A-Z])([^"]+)([A-Z])([^"]+")/\1-\L\2\3-\L\4\5-\L\6\7/g;
    s/(className="[^"]+)([A-Z])([^"]+)([A-Z])([^"]+")/\1-\L\2\3-\L\4\5/g;
    s/(className="[^"]+)([A-Z])([^"]+")/\1-\L\2\3/g
    ' *.jsx

    см. пример
    PS:
    ключ -i[SUFFIX], --in-place[=SUFFIX]
    edit files in place (makes backup if SUFFIX supplied)
    Ответ написан
    2 комментария
  • Как "убить" и закрыть 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 комментариев
  • Как в 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


    пример здесь
    Ответ написан
    Комментировать
  • Парсер webhook на bash?

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

    #!/bin/bash
    echo $@

    На выходе пусто


    данные POST запроса не передаются в cgi bash скрипт в виде параметров!
    скорее всего в bash скрипте нужно читать stdin
    например так:

    #!/bin/bash
    read POST_STRING
    echo $POST_STRING
    Ответ написан
    Комментировать
  • Как найти различающиеся по хэшу файлы в двух директориях с вложенными директориями?

    erge
    @erge
    Примус починяю
    под Windows : Total Commander, Unreal Commander, Double Commander
    под Linux: Double Commander
    функция - Команды - Синхронизировать каталоги (как-то так)
    mc и far вроде так же умеют сравнивать каталоги.

    скрипт лучше всего наверно написать на python (есть на любой ОС, хотя на любителя), взять за пример выше на VBS (честно не вчитывался) либо по своему написать, имхо - заносить хеши файлов в массив, затем сравнивать (ну как-то так)
    на bash предполагаю будет жутким извращением, хотя думаю что возможно.
    PS: в bash все равно не обойтись чистым bash, потребуется как минимум одна внешняя команда md5sum , которой в Windows скорее всего не будет и надо будет искать ее порт под Windows или аналог. Так же есть diff , который можно было бы использовать, но это опять же не встроенная в bash команда.

    так же
    GTBACKUP

    по rSync:
    поиск вообще пробовали? rsync windows
    cwRsync
    https://habr.com/ru/sandbox/48269/

    https://rsync.samba.org/

    либо даже Cygwin со всеми соответствующими плюшками.
    хотя, в Windows 10 есть целая подсистема Linux - WSL
    Ответ написан
    Комментировать
  • Как сделать grep в строке которая содержит точку с запятой; ?

    erge
    @erge
    Примус починяю
    • awk '{print $9}' PPP_genes.gff3.txt | head -3 | cut -d";" -f 3

    • awk '{print $9}' PPP_genes.gff3.txt | head -3 | grep -oP ";\KName=[^;]+"

    • awk '{print $9}' PPP_genes.gff3.txt | head -3 | sed 's/.*\(Name=[^;]*\).*/\1/'

    • [[ '`awk '{print $9}' PPP_genes.gff3.txt | head -3`' =~ .*(Name=[^;]+) ]] &&
          echo ${BASH_REMATCH[1]}

    Ответ написан
    Комментировать
  • Как сделать UI на Bash?

    erge
    @erge
    Примус починяю
    беглый уткопоиск дает сразу же ответ - ui на bash !
    Zenity !

    причем как выяснилось он(а) еще, и уже, установлен(а) (в Linux Mint 18.3)

    и все не просто а очень просто, вот пример окна с формой:
    zenity --forms --title="Add Friend" \
    	--text="Enter information about your friend." \
    	--separator="," \
    	--add-entry="First Name" \
    	--add-entry="Family Name" \
    	--add-entry="Email" \
    	--add-calendar="Birthday"


    zenity-forms-screenshot.png

    результат вовзращается в stdout в csv формате.

    смотрите Руководство Zenity

    UPD:

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

    advmenu.gif

    Bash GUI Whiptail Menu Tutorial Part 1

    А так же Glade
    см. ролики на youtube - BASH Tutorial - Advanced GUI Interface
    Ответ написан
    1 комментарий
  • Как разделить настройки GITBash и CMDER?

    erge
    @erge
    Примус починяю
    либо определять среду запуска по какой-то переменной окружения если такие вообще есть.
    либо самостоятельно в CMDER (либо наоборот в PHPStorm) если есть такая возможность - перед запуском bash устанавливать переменную окружения.

    а в .bashrc проверять эту переменную по условию if и если есть переменная, то выполнять настройки для CMDER, если нет, то для PHPStorm

    как-то так...
    Ответ написан
    Комментировать