Как разделить строку несколькими символами?

[1175083] Есть несколько причин, по которым вы, возможно, захотите избежать этого. Некоторые из них разумны, некоторые нет.Первая - это дисковое пространство: это самая основная. Если приложение зависит только от Qt, это не так уж плохо (хотя Qt все еще довольно большой). Однако, если приложение зависит от части KDE, Вы, вероятно, по существу, втянете весь стек библиотек KDE, который, вероятно, составит несколько гигабайт хранилища (я не уверен, так как я никогда не делал этого по причинам, которые я сейчас перечислю). Это происходит потому, что слои, составляющие стеки окружения рабочего стола, как правило, взаимозависимы, и более высокие уровни стека будут втягивать более низкие уровни. Программисты вряд ли будут использовать [1175472]только [1175473] нижние уровни стека.
  • Вторая причина - интеграция. Если вы запускаете что-то из семейства GNOME, например, GNOME Shell, Cinammon или MATE, приложение KDE вряд ли хорошо интегрируется в ваше окружение. Это потому, что приложение ожидает, что вместо версии GNOME там будет KDE-версия таких вещей, как уведомления или системный трей, и не может справиться с разницей. Таким образом, Вы можете испытать уродливые UI или тот факт, что некоторые милые вещи исчезли.Последняя причина - самая религиозная и неразумная: чистота. Некоторые люди считают, что если у Вас одновременно установлены библиотеки GNOME и KDE, то Вы разрушили "чистоту" Вашей системы GNOME, и теперь операционная система "испачкана" библиотеками KDE. Это ощущение не имеет технической основы, но многие [1175474] делают [1175475] так (включая меня, должен признать) и поэтому будут избегать втягивания библиотек KDE в качестве зависимостей (или, наоборот, избегать втягивания библиотек GNOME в их системы KDE).[1175090].
  • 1
    06.10.2014, 00:06
    4 ответа

    Обычно я просто использовал $ {параметр # слово расширение параметра Bash . Он расширяется $ Параметр , Удаление Word (который может быть шаблоном) от начала.

    В вашем случае что-то вроде:

    line=...
    echo ${line#*load average: }
    

    делает его функцией:

    get_load() {
        w | head -n 1 | { read -r line; echo ${line#*load average: }; }
    }
    
    4
    27.01.2020, 23:11

    Если вы хотите только последние номера, вы можете использовать GREP:

    $ w | grep -Po 'load average: \K.*'
    0.07, 0.13, 0.09
    
    3
    27.01.2020, 23:11

    Вы также можете использовать awk:

    $ w | head -1 | awk '{print $10,$11,$12}'
    0.80, 0.84, 0.93
    

    или, если количество полей переменная, используйте:

    $ w | head -1 | awk '{print $(NF-2),$(NF-1),$NF}'
    0.81, 0.82, 0.91
    

    или, гораздо более элегантно ( Спасибо @letitzia ):

    $ w | head -1 | awk -F "load average: " '{print $2}'
    

    SED:

    $ w | head -1 | sed 's/.*load average: *//' 
    

    Perl:

    $ w | head -1 | perl -pe 's/.*load average: *//' 
    

    или

    $ w | head -1 | perl -lne '/.*load average: *(.*)/ && print $1' 
    

    Вы действительно можете использовать Colrm здесь, но отметить, что он удаляет «столбцы», которые определяются как «один символ в линии ". Итак, пока он работает для примера, который вы предоставили (из-за дополнительного пространства), это не будет, если количество столбцов меняется дальше. Здесь он удаляет колонны с 1 по 51

    $ w | head -1 | colrm 1 51
    
    5
    27.01.2020, 23:11

    Другой Perl :

    $ w | head -1 | perl -nle 'print +(split /load average:/)[-1]'
     0.42, 0.49, 0.63
    
    0
    27.01.2020, 23:11

    Теги

    Похожие вопросы