ubuntuusers.de

Shell: Mehrere Dateien zu einer "vereinen"

Status: Ungelöst | Ubuntu-Version: Xubuntu 11.10 (Oneiric Ocelot)
Antworten |

Tramendo

Anmeldungsdatum:
3. September 2011

Beiträge: 81

Hallo,

Ich habe mehrere HTML Dateien, welche alle in einem Folder liegen, diese HTML Dateien könnte dann z.B so aussehen

1
2
3
Hallo Welt!

Das ist ein <strong>Hallo Welt!</strong>

ein anderes Beispiel wäre:

1
2
3
Ubuntuusers

<i>Fragen ist menschlich!</i>

Diese ganzen HTML Dateien würde ich nun gerne zu einer HTML Dateien vereinen, welche allerdings nur als String in einem Shell Script zwischen gespeichert werden soll, wo bei die erste Zeile immer als <h1> also als überschrift dienen soll. Außerdem müssen diese natürlich irgendwie geordnet sein, nach zeit wäre glaube ich am einfachsten(also neuste oben, alte unten).

Bei dem Beispiel von oben soll die im String "zwischengelagerte" HTML Datei dann so aussehen

1
2
3
4
5
6
7
<h1>Hallo Welt!</h1>

Das ist ein <strong>Hallo Welt!</strong>

<h1>Ubuntuusers</h1>

<i>Fragen ist menschlich!</i>

Was den Code des Shell scripts angeht, bin ich relativ ratlos...geht sowas überhaupt?

Das einzige was mir bisher eingefallen ist sieht so aus:

1
2
3
4
5
for file in `ls --format=single-column *`; do
		allesineinem=$(
                #Und hier müsste dann das hin, was ich oben versucht habe zu erklären...geht dies?
                )
done

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7782

cat datei1 datei2 datei3 > datei123

for f in datei*
do
    inhalt="$(<"$f")"
    inhalt="<h1>${inhalt/$'\n'/</h1>$'\n'}";
    gesamt="$gesamt$inhalt"
done

Tramendo

(Themenstarter)

Anmeldungsdatum:
3. September 2011

Beiträge: 81

frostschutz schrieb:

cat datei1 datei2 datei3 > datei123

Stimm, darauf hätte ich auch kommen können 😉 Hilft leider bei den beiden Hauptproblem mit der Sortierung nach Zeit und der 1 Zeile als <h1> nicht... Das liese sich ja irgendwie mit

1
awk '1;{print ""}'

Machen, aber wie genau?

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7782

hab den beitrag mal editiert

sortierung nach zeit? wenn die dateien nicht ordentlich benannt sind, dann halt eben ls --sort=time --reverse | while read f; do ...

Tramendo

(Themenstarter)

Anmeldungsdatum:
3. September 2011

Beiträge: 81

frostschutz schrieb:

hab den beitrag mal editiert

Hab ich schon gesehen - Danke, aber könntest du mir vielleicht kurz erklären, was die Zeilen 3-4 machen? Nur damit ich dies besser verstehe und beim nächsten mal nicht wieder nachfragen muss 😉 Eine Frage hätte ich noch: Tut

1
for f in datei*

nicht das gleiche wie

1
for file in `ls --format=single-column *`; do

?

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7782

Wenn möglich immer * direkt und nie ls verwenden.

Bei ls ist es unmöglich Dateinamen mit Sonderzeichen 100% korrekt zu behandeln.

Tramendo

(Themenstarter)

Anmeldungsdatum:
3. September 2011

Beiträge: 81

Hat alles geklappt \o/

Tramendo

(Themenstarter)

Anmeldungsdatum:
3. September 2011

Beiträge: 81

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Ubuntuusers
31.12.11[user:frostschutz:] [post:3726682: schrieb]:
> cat datei1 datei2 datei3 > datei123
> 
> {{{
> for f in datei*
> do
>     inhalt="$(<"$f")"
>     inhalt="<h1>${inhalt/$'\n'/</h1>$'\n'}";
>     gesamt="$gesamt$inhalt"
> done
> 

Wie müsste man diesen Code abändern, wenn ich aus zwei HTML Dateien, welche z.B so aussehen...

<i>Fragen ist menschlich!</i> }}}

1
2
3
4
Hallo Welt!
24.12.11

Das ist ein <strong>Hallo Welt!</strong>

..könnten eine HTML Datei erstellen möchte die so aussieht?

1
2
3
4
5
6
7
8
9
<h1>Hallo Welt!</h1>
<h3>24.12.11</h3>

Das ist ein <strong>Hallo Welt!</strong>

<h1>Ubuntuusers</h1>
<h3>31.12.11</h3>

<i>Fragen ist menschlich!</i>
Antworten |