Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Per Script eine textdatei ab einer Stelle überschreiben

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
Benutzeravatar
EgLe
Newbie
Newbie
Beiträge: 33
Registriert: 5. Dez 2004, 17:02
Wohnort: BaWü

Per Script eine textdatei ab einer Stelle überschreiben

Beitrag von EgLe »

Hallo,

gibt es in der Bash oder in C++ eine möglichkeit eine vorhandene Datei einzulesen und diese ab einer bestimmten Zeichenlänge
z.B. 20 Zeichen dieses neu überarbeitet wird, so das dann nach 20
Zeichen automatisch dieses dann in eine neue Zeile geändert wird.

Evtl. es aber wenn das mitten in einem Wort wäre, dieses dann komplett in eine neue Zeile stehen würde.
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

Ich hoffe, ich verstehe dich richtig. Hier ist ein Lösungsvorschlag in perl. Diese Scriptsprache ist so bei ziemlich jeder Linux- oder Unix-Installation dabei.

Code: Alles auswählen

#!/usr/bin/perl

$laenge=20;    # Hier die Zeilenlaenge anpassen
while (<>) {
  chomp;
  $frei=$laenge;
  for $wort (split /\s/) {
    if ($frei == $laenge) {
      print "$wort";
      $frei-=length($wort)
    } elsif ($frei > length($wort)) {
      print " $wort";
      $frei-=length($wort)+1;
    } else {
      print "\n$wort";
      $frei=$laenge-length($wort);
    }
  }
  print "\n";
}
Dieses Script ist wiefolgt zu gebrauchen:

Code: Alles auswählen

script.pl <eingabe.txt >ausgabe.txt
# oder auch
cat eingabe.txt | script.pl >ausgabe.txt
Benutzeravatar
EgLe
Newbie
Newbie
Beiträge: 33
Registriert: 5. Dez 2004, 17:02
Wohnort: BaWü

Beitrag von EgLe »

Hallo notoxp,

herzlichen Dank für dein Script und deiner Antwort. :)

Doch leider hilft es nicht weiter, da die ganze Sache für ein
PPC-Linux Image ist, und da leider kein Perl installiert ist
aus Platzmangel des Speichers :(

Es bräuchte also ein Bashscript zum ausführen, oder ein
C++ Code damit man es evtl. direkt ins Image einkompilieren kann.
Benutzeravatar
robi
Moderator
Moderator
Beiträge: 3175
Registriert: 25. Aug 2004, 02:13

Beitrag von robi »

Mit C kannst du erst mal prinzipiell alles machen, wenn du es logisch erklären kannst.

In einem Script könnte man sowas mit sed machen. Sed ist ein uralter scriptgesteuerter Zeileneditor, ohne den kommt heute immer noch kein UNIX-System aus. In vielen Scripten gibt es sed Aufrufe und der vi bedient sich intern auch dem sed. Allerdings ist sed nicht gerade das was man heute als schnell erlernbar und benutzerfreundlich bezeichnen würde. Also entweder ein schlaues Buch suchen oder dein Problem so genau wie möglich, wenn möglich mit genauen Dateiausschnitten und Änderungsbeispielen, hier ablegen und dann hoffen, dass sich hier einer erbarmt.
siehe ein sed Beispiel zB hier.
http://www.linux-club.de/viewtopic.php?t=25633

robi
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

EgLe hat geschrieben:Es bräuchte also ein Bashscript zum ausführen, oder ein C++ Code damit man es evtl. direkt ins Image einkompilieren kann.
Ich habe mich mit C zwar noch nicht beschäftigt, aber das dürfte doch nicht so weit von perl entfernt sein. Mit Bash wird das schon komplizierter, unmöglich dürfte es aber nicht sein. Wenn ich Zeit habe, reiche ich eines Nach. Es wurde schon der Vorschlag "sed" gemacht. Frage: Hast du den "sed" installiert? Oder vielleicht "awk"?
Benutzeravatar
EgLe
Newbie
Newbie
Beiträge: 33
Registriert: 5. Dez 2004, 17:02
Wohnort: BaWü

Beitrag von EgLe »

Hallo,

[quote="notoxp Mit Bash wird das schon komplizierter, unmöglich dürfte es aber nicht sein. Wenn ich Zeit habe, reiche ich eines Nach. Es wurde schon der Vorschlag "sed" gemacht. Frage: Hast du den "sed" installiert? Oder vielleicht "awk"?[/quote]

ja, sed selbst ist installiert.
awk ist nicht installiert...
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

hey, da muss man doch nciht gleich so dicke Geschütze auffahren, Unix: One Job One Tool :)

siehe 'info coreutils formatting' die Werkzeuge der Wahl dürften fmt und fold sein.

Code: Alles auswählen

fmt -s -w 20 < input > output
dabei werden allerdings überlange worte nicht umgebrochen da ist fold besser :)

Code: Alles auswählen

fold -s -c -w 20 < input > output
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

TeXpert hat geschrieben:

Code: Alles auswählen

fmt -s -w 20 < input > output

Code: Alles auswählen

fold -s -c -w 20 < input > output
Das ist anscheinend sogar UNIX System V. Selbst SCO UnixWare hat das. :shock:
Man lernt nie aus. Wer weiß, wie viele "Helferlein" aus meiner Feder überflüssig sind ...
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

die Dinger nennen sich ja nicht umsonst coreutil :) info coreutils hilft weiter.
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

TeXpert hat geschrieben:info coreutils hilft weiter.
Das gehört jedoch nicht zum System V. Aber dafür heißt dieses Forum ja auch "Linux-Club"...

Danke jedenfalls! :D
Antworten