Text einfügen in erste oder zweite Zeile eines Baumes

F

fertchen

Grünschnabel
Hallo Community. Ich habe hier ein langes halbfertiges Script. Dies soll ein Header in die ERSTE ZEILE einfügen, aber nur wenn in der ersten Zeile kein #! steht. Wenn dort #! steht, dann soll der HEader in die zweite ZEile eingefügt werden. Ich weiss nicht weiter. Vielleicht hat ja jemand eine Idee, wie man das Script lauffähig machen kann. Es fehlt die Baumauswahl, also aus welchem Baum sollen txt Dateien verändert werden. Danke
 
Zuletzt bearbeitet:
ungetestet:

(unter der Annahme du verwendest bash und GNU sed)
Code:
#!/bin/bash

for file in $(find /path/to/dir -type f)
do
	head -n 1 $file | egrep '^#!'
	if [ $? -eq 0 ]
	then
		sed -i '2i\inserted text' $file
	else
done

Achso, das nächste mal bitte CODE-Tags benutzen!
 
Zuletzt bearbeitet:
hätte so auch nicht funktioniert.... :)

Spass beiseite...
In Deinem Code ist die else-Klausel unvollständig....

Ich habe mir einfach mal erlaubt, den Code zu verfollständigen....
Code:
[FONT="Courier New"]#!/bin/bash

for file in $(find /path/to/dir -type f)
do
	head -n 1 $file | egrep '^#!'
	if [ $? -eq 0 ]
	then
		sed -i '2i\inserted text' $file
	else
[B]		sed -i '1i\inserted text' $file
	fi[/B]
done[/FONT]
 
so gehts, nur noch Abfragen ob Header schon besteht

, dann keinen neuen Header einfügen.

Wo genau muss das hier rein. Also erst lesen ob der Header vorhanden ist, dann in diesen Dateien, wenn vorhanden, keinen Header schreiben.

Vielen Dank an alle
 
ist noch was unklar....?
War das eine neue Frage von Dir?
 
Nur noch abfragen, ob der Header schon existiert

Hallo. Danke für die Hilfe. Ja, ich habe noch eine (wahrscheinlich eher 100) Frage(n). Also ich möchte, dass das Script, bevor der Header reingeschrieben wird, prüft, ob sich nicht bereits der Header in den Dateien befindet. Findet es den Header, soll kein neuer Header geschrieben werden. Findet er es nicht, dann Header schreiben...

Beste Grüsse und schonmal vielen Dank,
 
hast Du den Code weiter oben überhaupt schon mal getestet.
Der Code prüft ob die erste Zeile mit "#!" beginnt.

In Abhängigkeit von dem Ergebnis wird in der ersten oder zweiten Zeile der entsprechende Text eingefügt...!
 
Hallo. Ja klar habe ich den Code getestet. Nur trägt er bei mehrfachausführung halt nochmal eine Zeile mit dem inserted text ein. das sieht dann halt so aus
#! blabla
inserted text
inserted text
oder
blabla
#! blabla
inserted text
inserted text
ich will, das er nachschaut, ob bereits inserted text vorhanden ist im head, und nur dann inserted text einträgt, wenn nicht...
 
so sollte es aber jetzt passen....

Unterhalb von else habe ich zwei verschiedene sed-Zeilen vorbereitet.
Wahlweise kannst Du nur "inserted text" oder auch noch "#! blabla" mit einfügen lassen.

Den Suchpfad und das Dateimuster musst Du noch für Deine Anwendung anpassen.
Bitte vorerst mal mit Test-Daten probieren.
Code:
[FONT="Courier New"]#!/bin/bash

for file in $(grep -L "inserted text" [B]/tmp/test/test*.txt[/B])
do
        head -n 1 $file | egrep '^#!' >/dev/null 2>&1
        if [ $? -eq 0 ]
        then
                echo "$file: inserted text in Zeile 2 eingefügt"
                sed -i '2i\inserted text' $file
        else
                echo "$file: inserted text in Zeile 1 eingefügt"
                # fügt "inserted text in Zeile 1 ein
                sed -i '1i\inserted text' $file

                # fügt "#! blabla"in Zeile 1 und "inserted text in Zeile 2 ein
                #sed -i '1i\#! blabla\ninserted text' $file
        fi
done[/FONT]
 
es geht

Vielen Dank für deine Geduld und deine Motivation. Der Code funktioniert. Leider nur für den Ordner der im Pfad steht. Wie kann ich den Code denn auf einen Baum, also Unterordner, anwenden.

Besten Dank
 

Ähnliche Themen

Zeilen auslesen und anderer Stelle wieder einfügen

ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern

Tabelle erst ab bestimmter Spalte anzeigen

Zeile für Zeile auslesen und Befehl ausführen

Zeilenweise suchen, löschen und ersetzen / Inhalt einfügen

Zurück
Oben