Home   Profil   Fun
#36 Linux  28.08.2008

Bashskripte zur Bearbeitung von Textdateien


Die folgenden kleinen Skripte habe ich zur Bearbeitung von vielen Textdateien geschrieben. Manche Operationen lassen sich nur noch umständlich mit einer einzige Kommandozeile ausführen. Die Bashskripte machen nicht mehr als Text einfügen, oder Dateien verschmelzen usw. und arbeiten mit allen Dateien im Ordner "files";

Den Inhalt einer anderen Textdatei am Anfang einfügen.
#!/bin/bash
for i in ./files/*
do
  cat sampletext.txt > ${i}_tmp
  cat $i >> ${i}_tmp
  mv ${i}_tmp $i
done
exit

Eine bestimmte Zeile mit Hilfe von grep finden und deren Zeilennummer extrahieren. Anschließend alle Zeilen ab dieser Zeile(eingeschlossen) bis Zeile 2000 löschen.
#!/bin/bash
for i in ./files/*
do
  LINENUMBER=`grep -n "some text" $i | sed 's/:.*//'`
  sed -i -e "$LINENUMBER,2000d" $i
done
exit

Den Inhalt des HTML-Tags <h1> extrahieren und damit den Inhalt des Tags <title> ersetzen.
#!/bin/bash
for i in ./files/*
do
  H1=`grep "<h1>" $i | sed -e 's/^.*<h1>//' | sed -e 's/<\/h1.*$//'`
  sed -i -e "s/<title>.*<\/title>/<title>$H1<\/title>/" $i
done
exit

Die ersten 20 Zeilen in eine temporäre Datei schreiben.
Dann eine beliebige Zeile am Ende der temporären Datei anfügen und danach alles ab Zeile 22(eingeschlossen) der Originaldatei ebenfalls anfügen. Zuletzt wird die Originaldatei mit der temporären Datei überschrieben.
#!/bin/bash
for i in ./files/*
do
 head -n20 $i > ${i}_tmp
 echo -e "some text" >> ${i}_tmp
 tail -n +22 $i >> ${i}_tmp
 mv ${i}_tmp $i
done
exit

Sehr hilfreich bei solchen Operationen ist auch das Kommando "tac".
Es dreht die Reihenfolge der Zeilen einer Datei um, sodass die Datei mit der letzten Zeile beginnt.