альтернатива lmsensor:
установить xsensors с помощьюsudo apt-get install xsensors
Попробуйте это,
Имейте в скрипте следующее, чтобы прокомментировать или раскомментировать модуль
if [ "$2" == uncomment ]; then
sed -i "/<IfModule $1>/,/<\/IfModule>/ s/^#//" apache.conf
elif [ "$2" == comment ]; then
sed -i "/<IfModule $1>/,/<\/IfModule>/ s/^\(<\| \)/#\1/" apache.conf
fi
Синтаксис для запуска скрипта:
sh script.sh <moduleName> <comment/uncomment>
Пример:
sh script.sh mod_disk_cache.c uncomment
Вы можете сделать это с помощью простого конечного автомата в awk
. Для простоты предположим, что mod.xml
содержит:
#stuff
#
#<IfModule mod_disk_cache.c>
# CacheRoot "/var/cache/mod_proxy"
# CacheEnable disk
# CacheEnable disk
# CacheEnable disk
# CacheIgnoreCacheControl On
# CacheDirLevels 1
#</IfModule>
#
#other stuff
Затем,
$ cat mod.xml | awk -F'#' 'BEGIN { state = 0; } { if (/mod_disk_cache/) state = !state; if (state) print $2; else print $0; if (/\/IfModule/) state = !state; }' > umod.xml
$ cat umod.xml
#stuff
#
<IfModule mod_disk_cache.c>
CacheRoot "/var/cache/mod_proxy"
CacheEnable disk
CacheEnable disk
CacheEnable disk
CacheIgnoreCacheControl On
CacheDirLevels 1
</IfModule>
#
#other stuff
Переменная state
записывает, когда мы находимся внутри(state == 0
)или снаружи(state != 0
)блока, который хотим прокомментировать/раскомментировать.
Примечание.:Здесь важно, чтобы приведенный выше блок не содержал подблоков -, заканчивающихся на </IfModule>
, потому что это приведет к преждевременному сбросу состояния. Если вам нужно поддержать это дело, то государство должно захватить больше. Например, рассмотрите возможность сделать состояние целым числом, которое равно -1
, когда вы находитесь за пределами целевого блока, устанавливается в 0
, когда вы входите в целевой блок, и увеличивается, когда вы входите в подблок -.
Эта команда обрабатывает ваш исходный ввод, где блок mod_cache.c
имеет вложенный подблок -:
$ cat mod.xml | awk -F# 'BEGIN { state = -1; } { if (/<IfModule mod_cache\.c>/) state = 0; else if (/<IfModule.*>/) state++; if (state >= 0) print $2; else print $0; if (/<\/IfModule/) state--;}'
Вернемся к простому примеру, чтобы -прокомментировать, вы можете сделать что-то подобное, просто установите разделитель полей вывода (OFS )и распечатайте #
перед каждой строкой, когда state
оценивается как правда:
$ cat umod.xml | awk -F'#' 'BEGIN { OFS=""; state = 0; } { if (/mod_disk_cache/) state = !state; if (state) print "#", $0; else print $0; if (/\/IfModule/) state = !state; }'
#stuff
#
#<IfModule mod_disk_cache.c>
# CacheRoot "/var/cache/mod_proxy"
# CacheEnable disk
# CacheEnable disk
# CacheEnable disk
# CacheIgnoreCacheControl On
# CacheDirLevels 1
#</IfModule>
#
#other stuff
Чтобы раскомментировать, мы можем использовать следующую команду
awk '/#.*IfModule mod_cache.c/,/#.*IfModule mod_expires.c/{gsub("#","",$0)}1' filename
Комментировать
awk '/^<IfModule mod_cache.c/,/^<IfModule mod_expires.c/{$0="#"$0}1' filename