Как я извлекаю части строки к переменным?

Попробовать xfconf-query как это

xfconf-query -c xsettings -p /Net/ThemeName -s "Greybird"

Где можно заменить Greybird с названием Вашей темы. С кавычками, если это не ни одно слово, так например, "Ambiance-XFCE-LXDE-Yellow", должен быть также в кавычках.

Теперь, если то, что Вы хотите, должно изменить только некоторые части Вашей текущей темы, не переключившись на другую тему в целом, затем это не поможет. В этом случае я предложил бы делать несколько копий Вашей темы, назвав их "Моей Аккуратной Темой 1" "Моя аккуратная Тема 2" и так далее; сделайте модификации на каждом, для каждой конкретной потребности и наконец просто переключите между теми темами использование xfconf-query.

8
16.04.2015, 19:27
4 ответа

Bash может соответствовать регулярным выражениям с помощью = ~ [[...]] [[[...]] :

#! /bin/bash

line='attempting to create a 512^3 level (with Dirichlet BC) using a 16^3 grid of 32^3 boxes and 800 tasks...'
num='([0-9^]+)'
nonum='[^0-9^]+'
if [[ $line =~ $num$nonum$num$nonum$num$nonum$num ]] ; then
    level=${BASH_REMATCH[1]}
    grid=${BASH_REMATCH[2]}
    boxes=${BASH_REMATCH[3]}
    tasks=${BASH_REMATCH[4]}
    echo "Level $level, grid $grid, boxes $boxes, tasks $tasks."
fi
15
27.01.2020, 20:09

Если это выводится из программы / сценария, который вы написали, и текст является формулиическим (т. Е. Точно следует этот шаблон), вы можете просто использовать Cut .

#!/bin/bash

$STRING='attempting to create a 512^3 level (with Dirichlet BC) using a 16^3 grid of 32^3 boxes and 800 tasks...'

level=$(echo $STRING | cut -d' ' -f5 -)
grid=$(echo $STRING | cut -d' ' -f12 -)
boxes=$(echo $STRING | cut -d' ' -f15 -)
tasks=$(echo $STRING | cut -d' ' -f18 -)
2
27.01.2020, 20:09

Использование awk:

awk '{print "level="$5"\n""grid="$12"\n""boxes="$15"\n""tasks="$18}' file     
level=512^3
grid=16^3
boxes=32^3
tasks=800
2
27.01.2020, 20:09

Если линия всегда имеет именно эту структуру, чтение может сделать это в одной строке без внешних процессов:

read x x x x level x x x x x x grid x x boxes x x tasks x <<<"$line"

(также с использованием Eysteming ). Это сохранит все слова, о которых вы не заботитесь в x (для игнорирования) и значения, которые вы хотели в их соответствующие переменные.

1
27.01.2020, 20:09

Теги

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