Как рекомендует @Beta, вам, вероятно, следует разбить вашу проблему на несколько подзадач, которые вы можете решить самостоятельно. Давайте начнем с поиска способа преобразования разделов, затем статусов, затем комбинирования обоих и, наконец, но не в последнюю очередь, объединения всего этого для запуска нескольких файлов.
Преобразование заголовка (один файл)
Мы можем использовать sed
для обнаружения разделов и преобразования их в две строки: renewcommand и new section.
sed -r 's/\\section\{([^}]+)\}/\\renewcommand{\\TITLE}{\1}\n\\section{\\TIT}/g'
Работает так:
echo '\section{The title}' | sed -r 's/\\section\{([^}]+)\}/\\renewcommand{\\TITLE}{\1}\n\\section{\\TIT}/g'
Результатом будет:
\renewcommand{\TITLE}{The title}
\section{\TIT}
Статус преобразования (один файл)
Мы можем применить очень похожую трансформацию для статуса:
sed -r 's/\\status\{([^}]+)\}/\\renewcommand{\\STATUS}{\1}\n\\STA/g'
Что изменится:
\status{Work in progress}
в:
\renewcommand{\STATUS}{Work in progress}
\STA
Объедините оба (один файл)
Теперь вы можете легко применять один седь за другим к данному файлу:
sed -ir \
-e 's/\\status\{([^}]+)\}/\\renewcommand{\\STATUS}{\1}\n\\STA/g' \
-e 's/\\section\{([^}]+)\}/\\renewcommand{\\TITLE}{\1}\n\\section{\\TIT}/g' filename.tex
Это применит оба преобразования к filename.tex
и изменит их на месте.
Применить к нескольким файлам
Теперь вы можете применить эту команду sed
ко всем файлам в вашей папке (рекурсивно), используя find
и xargs
, чтобы вызвать команду для каждого файла:
find . -name '*.tex' -print0 | xargs -0 -I{} sed -ri \
-e 's/\\status\{([^}]+)\}/\\renewcommand{\\STATUS}{\1}\n\\STA/g' \
-e 's/\\section\{([^}]+)\}/\\renewcommand{\\TITLE}{\1}\n\\section{\\TIT}/g' {}
find . -name '*.tex' -print0
будет рекурсивно перечислять все tex
файлы. Затем | xargs -0 -I{} command {}
вызовет command
для каждого отдельного файла.
Я бы позаботился о том, чтобы вы сделали резервную копию (или контроль версий) всех ваших файлов перед попыткой таких преобразований. Просто чтобы убедиться, что вы можете откатиться, если что-то пойдет не так.
Надеюсь, это поможет.