Я написал функцию bash для печати разделов текста, заключенных между строками, соответствующими ## режим: орг.
и ## # Конец организации
в файле с пустой строкой между секциями. Перед ##
, может быть любое количество пробелов.
Вот пример файла, из которого нужно извлечь информацию.
файл: test.sh
## режим: орг.
## * Использование оператора case
## # Конец организации
case $arg в
(«В»)
эхо "Автор"
;;
(*)
## режим: орг.
## ** Режим автоматического сообщения об ошибках (SERM) в getopts
## *** Обнаруживает предупреждения без вывода встроенных сообщений.
## *** Включается двоеточием {:} в качестве первого символа в сокращении.
## # Конец организации
сломать
;;
эсак
Желаемый результат будет
Код:
* Использование оператора case
** Режим тихих отчетов об ошибках (SERM) в getopts
*** Обнаруживает предупреждения без печати встроенных сообщений.
*** Включается двоеточием {:} в качестве первого символа в сокращении.
Вот функция, которую я использую
захват-орг ()
{
локальный файл = "$1"
local begsec="## режим: org"
local endsec="## # Конец организации"
sed -n "/^[[:space:]]*${begsec}$/,/^[[:space:]]*${endsec}$/s/ *//p'" "$efile" |
sed 's/^'"${begsec}"'$/\n'"${begsec}"'/' |
sed '/^'"${begsec}"'$/d' | sed '/^'"${endsec}"'$/d' | вырезать -с 3-
}
Я хотел бы упростить функцию, используя переменные для построения шаблонов. Но мне нужна помощь для компиляции команд, чтобы мне не приходилось вызывать сед
так много раз.
Возможно, используя аук
будет лучшей стратегией.
захват-орг ()
{
локальный файл = "$1"
local begsec='^[[:space:]]*## режим: org$'
local endsec='^[[:space:]]*## # Конец org$'
sed -n "/${begsec}/,/${endsec}/s/ *//p" "$efile" |
sed 's/^## # Конец организации$/## # Конец организации\n/' |
sed '/^## режим: org$/d' | sed '/^## # Конец org$/d' | вырезать -с 3-
}