У меня есть ряд папок, содержащих три файла, которые я хочу объединить как часть сценария.

Эти три файла называются file.html1 file.html2 file.html3. Я хочу объединить их в file.html

Я использую этот цикл:

find . -name "file.html" -print0 | while IFS= read -r -d '' n; do
  perl -i.bak -0pe  's/<\/h2>\n(.*?\n)*/<\/h2>\n/' "$n"  #extract 1st part of file.html and create .bak
  perl -i -0pe  's/(.*\n)*.*?<\/h2>\n//' "$n.bak"  #extract 2nd part of file.html
  rename 's/\.html/\.html1/' $n
  rename 's/\.bak/3/' $n.bak
  cat $n1 $n2 $n3 >> $n
done

Этот скрипт разбивает оригинальный файл file.html на file.html1 и file.html3. file.html2 был создан ранее в сценарии.

Проблема с командой cat. Как я могу объединить их в этом случае, а затем удалить три фрагмента? Язык не важен.

1 ответ1

1

Хорошо, теперь я вижу проблему, вам просто нужно заключить в кавычки либо переменную, либо строку (1 , 2 т.д.). В противном случае $n1 принимается за имя переменной:

find . -name "file.html" -print0 | while IFS= read -r -d '' n; do
  perl -i.bak -0pe  's/<\/h2>\n(.*?\n)*/<\/h2>\n/' "$n"  #extract 1st part of file.html and create .bak
  perl -i -0pe  's/(.*\n)*.*?<\/h2>\n//' "$n.bak"  #extract 2nd part of file.html
  rename 's/\.html/\.html1/' $n
  rename 's/\.bak/3/' $n.bak
  cat "$n"1 "$n"2 "$n"3 >> $n
done

Вы также можете использовать cat $n"1" $n"2" $n"3" >> $n но это сломается, если имена файлов будут содержать пробелы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .