Mesclar três arquivos em um em um script bash

0

Eu tenho uma série de pastas contendo três arquivos que quero concatenar como parte de um script.

Os três arquivos são denominados file.html1 file.html2 file.html3. Eu quero concatená-los em file.html

Estou usando esse loop:

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

Este script divide o file.html original em file.html1 e file.html3. file.html2 foi produzido anteriormente no script.

O problema está no comando cat. Como posso concatená-los neste caso e depois excluir os três fragmentos? A linguagem não é importante.

    
por To Do 20.05.2013 / 14:06

1 resposta

1

OK, eu vejo o problema agora, você só precisa citar a variável ou a string ( 1 , 2 etc). Caso contrário, $n1 é considerado o nome da variável:

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

Você também pode usar cat $n"1" $n"2" $n"3" >> $n , mas isso será interrompido se os nomes dos arquivos contiverem espaços.

    
por 20.05.2013 / 15:43

Tags