@NIKA_R

Как не переформатируя файл .docx заменить в документе строку при помощи bash из терминала в linux?

Как не переформатируя файл .docx заменить в документе строку при помощи bash из терминала в linux?

Есть шаблон .docx и текстовый файл .txt.
Нужно на bash прочитать построчно текстовый файл и заменить в документе шаблона текст '????' на строку из файла.

Задача тривиальная, но файл .docx нельзя переконвертировать в другие форматы (
P.S Про pandoc знаю, тут не подходит (

#!/bin/bash

template="blanc.docx"
student_list="ФИО.txt"
output_dir="certificate"
tmp_d="tmp_word"

mkdir $tmp_d $output_dir

unzip  $template -d $tmp_d
cp $tmp_d/word/document.xml .

while read -r student_name; do
  echo $student_name
  cp  . $tmp_d/word/document.xml
  sed -i "s/????/$student_name/g" $tmp_d/word/document.xml
  cd $tmp_d
  zip -r $student_name.docx *
  mv $student_name.docx ./certificate
  rm document.xml
  cp  ./document.xml $tmp_d/word/document.xml
done < "$student_list"

Не понимаю, почему данный скрипт просто архивирует содержимое временное папки, а не запаковывает обратно в
.docx
  • Вопрос задан
  • 841 просмотр
Решения вопроса 1
karabanov
@karabanov
Системный администратор
#!/bin/bash -e

template="blanc.docx"
student_list="ФИО.txt"
output_dir="certificate"
tmp_d="tmp_word"

mkdir -p "$tmp_d" "$output_dir"

unzip "$template" -d "$tmp_d"
cp "$tmp_d/word/document.xml" .

while read -r student_name; do
  echo -e "\n\033[0;32m${student_name}\033[0m"
  cp document.xml "$tmp_d/word/document.xml"
  sed -i "s/????/$student_name/g" "$tmp_d/word/document.xml"
  cd "$tmp_d"
  zip -r "../$output_dir/$student_name.docx" *
  cd ..
done < "$student_list"

rm -rf document.xml "$tmp_d"
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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