Я нашел решение.
Добавьте параметр --delete-first, так что это:
mirror -c -P5 --log='/var/log/'"$base_name"'.log' "$remote_dir" "$local_dir"
становится следующим:
mirror -c -P5 --delete-first --log='/home/osmc/'"$base_name"'.log' "$remote_dir" "$local_dir"
Итерация записей, сохранение идентификатора для $packages
, печать строк, когда идентификатор установлен, и выход после печати, когда вы найдете следующий ]
:
awk '/\$packages/ {c=1; print; next} /\]/ {print; exit}; c{print}'
Пример:
% cat file.txt
... #code
$packages = [
'git', # version control
...
'iftop', # monitor network usage by ip
'iotop', # monitor io usage
]
... #more code
... #code
$packages = [
'git', # version control
...
'iftop', # monitor network usage by ip
'iotop', # monitor io usage
]
... #more code
% awk '/\$packages/ {c=1; print; next} /\]/ {print; exit}; c{print}' file.txt
$packages = [
'git', # version control
...
'iftop', # monitor network usage by ip
'iotop', # monitor io usage
]
Используем оператор range
,
из sed
для выбора интересующего нас диапазона строк. Для данного сценария диапазон начинается со строки $package
и заканчивается ]
(в разных строках).
Сначала мы отбрасываем любые строки вне диапазона, /\$package/,/]/!d
, а затем из диапазона печатаем их все (из-за неявной печати свойства pattern space в sed
) НО выходим
, как только встречается строка со строкой ]
. Это означает, что мы вывели в stdout первый из диапазонов /\$package/,/]/
sed -e '/\$packages/,/]/!d; /]/q' yourfile
sed -n '/\$packages/,/]/p; /]/q' yourfile