Bir bash betiğinde üç dosyayı bire bir birleştir


0

Bir betiğin parçası olarak birleştirmek istediğim üç dosya içeren bir dizi klasörüm var.

Üç dosya, file.html1 file.html2 file.html3 olarak adlandırılır. Onları file.html ile birleştirmek istiyorum

Bu döngüyü kullanıyorum:

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

Bu komut dosyası, orijinal file.html dosyasını file.html1 ve file.html3 içine böler. file.html2 komut dosyasında daha önce üretildi.

Sorun cat komutunda. Onları bu durumda nasıl birleştirebilir ve sonra üç parçayı nasıl silebilirim? Dil önemli değil.

Yanıtlar:


1

Tamam, şimdi sorunu görüyorum, yalnızca değişkeni veya dizeyi ( 1, 2vb.) Alıntı yapmanız yeterlidir . Aksi halde $n1değişken ismi olarak alınmaktadır:

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

Ayrıca kullanabilirsiniz, cat $n"1" $n"2" $n"3" >> $nancak dosya adları boşluk içeriyorsa bu durum bozulur.


1
Endişelenmeyin, sorularınızı olabildiğince açık hale getirmeyi unutmayın, bu soruları yararlı bir şekilde cevaplamayı çok kolaylaştırır.
terdon

Alternatif olarak cat "${n}1" …eğer biri estetik nedenlerden dolayı bunu tercih ederse: Genişletilecek olan parametre adı veya simge isteğe bağlı olan ancak hemen sonra genişletilecek değişkeni korumaya yarayan parantez içine alınabilir ( adın bir parçası olarak yorumlanabilir. Bash kılavuzu ) - cc @ToDo
slhck
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.