Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ bfs(1) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

ed(1)

bfs(1)                                                               bfs(1)

NAME
     bfs - Große Dateien durchsuchen (big file scanner)

SYNTAX
     bfs [-] datei

BESCHREIBUNG
     bfs ist ähnlich wie ed; man kann jedoch mit bfs nichts an der bearbei-
     teten Datei ändern. Dateien werden von bfs nur gelesen, wobei die
     Dateien viel größer sein können als bei ed.

     Die Dateien können bis zu 1024 KByte groß sein. Die maximale Anzahl
     der Zeilen ist 32 K, die der Zeichen pro Zeile 512 (einschließlich
     Neue-Zeile-Zeichen).

     bfs ist in der Regel effizienter als ed, da die zu durchsuchende Datei
     nicht in einen Puffer kopiert wird.

     bfs-Kommandos können interaktiv eingegeben werden oder in einer Datei
     stehen, aus der sie von bfs gelesen werden (siehe Zusätzliche bfs-
     Kommandos, xf).

ARGUMENTE
     -       Unterdrückt die standardmäßige Ausgabe

             -  der Größe einer Datei

             -  der Fehlermeldungen

     datei   Name der Datei, die Sie mit bfs durchsuchen möchten.

AUSGABE
     bfs gibt die Größe der durchsuchten Datei sowie die Größe einer mit w
     geschriebenen Datei aus.

     Wie auch bei ed erscheint nach der Eingabe von P <RETURN> als Bereit-
     zeichen das Zeichen Stern * am Bildschirm. Falls im *-Modus ein Fehler
     auftritt, gibt bfs eine Fehlermeldung aus und beendet sich. Wenn Sie
     ein weiteres Mal P <RETURN> eingegeben, so wird die Anzeige des
     Bereitzeichens * und der Fehlermeldungen wieder ausgeschaltet.

     Adressen

     Adressen können Sie im gleichen Format angeben wie bei ed. Zusätzlich
     haben Sie folgende Möglichkeiten:

     -  Reguläre Ausdrücke können außer in /... / und ?...? auch in >...>
        und <...< eingeschlossen werden. > bedeutet hier eine Suche in Vor-
        wärtsrichtung bis zum Dateiende, < eine Suche in Rückwärtsrichtung
        bis zum Dateianfang. Anders als bei / bzw. ? wird aber zur Fortset-
        zung der Suche nicht von Dateiende zum Dateianfang bzw. umgekehrt
        gesprungen.



Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

bfs(1)                                                               bfs(1)

     -  Zur Markierung der Zeilen sind nur die Buchstaben a bis z zulässig.
        Alle 26 Markierungen werden gespeichert.

KOMMANDOS
     Es gibt Kommandos, die sich ähnlich wie ed-Kommandos verhalten, sowie
     zusätzliche bfs-Kommandos. Beide Arten werden im folgenden getrennt
     alphabetisch aufgelistet.

   ed-ähnliche Kommandos

     Die folgenden Kommandos funktionieren ähnlich wie bei ed. Die vorhan-
     denen kleinen Unterschiede werden jeweils genannt. Die genaue
     Beschreibung der Kommandos finden Sie bei ed.

     e datei
          Die Angabe von datei ist zwingend. Die datei wird von bfs als
          aktuelle Datei bearbeitet, d. h. es kann immer nur eine Datei
          bearbeitet werden.

     f    Gibt den Namen der durchsuchten Datei aus. Es gibt keinen gespei-
          cherten zweiten Dateinamen.

     p    Das Kommando 1,10 hat die gleiche Bedeutung wie das Kommando
          1,10p: die ersten 10 Zeilen werden ausgegeben.

     P    Falls ein Fehler auftritt werden Fehlermeldungen ausgegeben.

     q
     w    w ist unabhängig von einer Ausgabeumleitung, -abkürzung oder
          -komprimierung (siehe unten xo, xt, xc).

   Zusätzliche bfs-Kommandos

     [bereich]xb/regulärerAusdruck/label

          bereich nicht angegeben:

          Es wird nur ab der aktuellen Zeile gesucht.

          Wird im angegebenen Bereich eine Zeichenfolge gefunden, die zu
          regulärerAusdruck paßt, so wird diese Zeile zur aktuellen Zeile
          und es erfolgt ein Sprung (entweder in Vorwärts- oder in Rück-
          wärtsrichtung) zu label. Ein label kann mit dem Doppelpunkt-
          Kommando :label (s. u.) gesetzt werden. Das label befindet sich
          in der bfs-Kommandodatei (siehe xf).

          In den folgenden Situationen ist ein Sprung nicht möglich:

          -  Eine der Adressen von bereich liegt nicht zwischen 1 bis $
             (erste Zeile bis letzte Zeile der Datei).

          -  Die zweite Adresse liegt vor der ersten.


Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

bfs(1)                                                               bfs(1)

          -  Der reguläre Ausdruck paßt nicht zumindest zu einer Zeile im
             angegebenen Bereich (einschließlich der ersten und letzten
             Zeile).

          Bei ungültigen Adressen gibt xb als einziges Kommando keine Feh-
          lermeldungen aus, sondern es tut nichts. An diesem Verhalten
          erkennen Sie, daß die angegebene Adresse ungültig ist. Deshalb
          können Sie mit diesem Kommando vor der Ausführung anderer Komman-
          dos prüfen, ob Adressen gültig sind.

          Das Kommando

          xb/^/label

          bewirkt einen unbedingten Sprung, d. h., es muß keine Bedingung
          erfüllt sein.

          Das Kommando xb ist nur zulässig, wenn es nicht von einem Termi-
          nal gelesen wird. Wenn es aus einer Pipe gelesen wird, so ist nur
          ein Sprung in Vorwärtsrichtung möglich.

     xbnlabel
     xbzlabel
          Bei diesen beiden Kommandos wird der zuletzt gespeicherte Ende-
          status eines Reliant UNIX Kommandos (!kommando) geprüft:

          -  xbz springt zum gesetzten Label, falls der Endestatus 0 (wahr)
             ist.

          -  xbn springt zum gesetzten Label, falls der Endestatus ungleich
             0 (falsch) ist.

          Andernfalls sind xbn und xbz wirkungslos.

     xc[schalter]
          Komprimierung der Ausgabe von p oder des leeren Kommandos ein-
          schalten oder ausschalten. In einer komprimierten Ausgabe werden
          aufeinanderfolgende Tabulator- und Leerzeichen bis auf ein Leer-
          zeichen gestrichen und Leerzeilen entfallen.

          schalter kann sein

          0  Die Ausgabe wird nicht komprimiert (Standard).

          1  Die Ausgabe wird komprimiert.

          schalter nicht angegeben:

          Ein gesetzter Schalter wird umgekehrt.





Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

bfs(1)                                                               bfs(1)

     xfdatei
          bfs liest aus der angegebenen datei zusätzliche Kommandos. Wenn
          das Dateiende erreicht ist, ein Unterbrechungssignal empfangen
          wurde oder ein Fehler aufgetreten ist, dann liest bfs das nächste
          Kommando in der Datei, die das xf-Kommando enthält.

          Es können bis zu 10 xf-Kommandos ineinander verschachtelt werden.

     xn   Die aktuellen Markierungen werden ausgegeben. Eine Zeile wird mit
          dem Kommando k markiert [siehe ed(1)].

     xo[datei]
          Die nachfolgenden Ausgaben des Kommandos p und des leeren Komman-
          dos werden in die angegebene datei umgeleitet. Falls die Datei
          noch nicht existiert, wird sie neu angelegt und erhält folgende
          Zugriffsrechte: rw-------.

          Die Zugriffsrechte einer neu erstellten Datei hängen von umask
          ab.

          Falls die Datei bereits existiert, wird sie auf die Länge 0 ver-
          kürzt und gegebenenfalls überschrieben; ihre Zugriffsrechte wer-
          den nicht verändert. Schreibgeschützte Dateien werden nicht über-
          schrieben.

          datei nicht angegeben:

          Die Ausgabe wird auf die Standardausgabe umgeleitet. Falls Sie
          die Ausgabe nacheinander in zwei verschiedene Dateien umleiten
          wollen, müssen Sie dazwischen die Ausgabe auf die Standardausgabe
          umleiten.

     xtn  Die Ausgabe des Kommandos p und des leeren Kommandos wird auf
          maximal n Zeichen gekürzt.

          xtn nicht angegeben:

          Die Ausgabe wird auf 255 Zeichen begrenzt.

     xvziffer [wert]
          Mit xv können Sie einer Variablen einen Wert zuweisen. Den Varia-
          blennamen geben Sie durch die ziffer an, die auf das Kommando xv
          folgt. ziffer kann eine Zahl zwischen 0 und 9 sein.

          Sowohl die Kommandoeingabe xv5100

          als auch die Kommandoeingabe xv5 100

          weisen der Variablen 5 den Wert 100 zu.





Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

bfs(1)                                                               bfs(1)

          Die Kommandoeingabe xv61,100p

          weist der Variablen 6 den Wert 1,100p zu.

          Eine Variable wird adressiert, indem ihrem Namen ein % vorange-
          stellt wird. So werden, wenn den Variablen 5 und 6 die oben
          genannten Werte zugewiesen wurden, mit jeder der folgenden Kom-
          mandoeingaben

          1,%5p
          1,%5
          %6

          die ersten 100 Zeilen ausgegeben.

          Mit der Kommandoeingabe

          g/%5/p

          suchen Sie die Zeichenkette 100 global und jede Zeile, in der
          diese Zeichen enthalten sind, wird ausgegeben. Wenn Sie dem
          Prozent-Zeichen % einen Gegenschrägstrich \ voranstellen (\%),
          dann wird die Sonderbedeutung von % aufgehoben.

          Mit der Kommandoeingabe

          g/".*\%[cds]/p

          suchen Sie global nach einer Zeichenkette, die Anführungszeichen
          enthält, dann beliebig viele Zeichen gefolgt von einem Prozent-
          Zeichen vor einem der Buchstaben c, d oder s. Gefundene Zeichen-
          ketten werden ausgegeben. Damit suchen Sie printf-Anweisungen,
          wie sie das Kommando awk oder die Programmiersprache C verwendet.

          Mit xv können Sie auch dafür sorgen, daß die erste Ausgabezeile
          eines Reliant UNIX Kommandos in einer Variablen abgelegt wird.
          Dazu muß das erste Zeichen von wert ein Ausrufezeichen ! sein.

          So kann etwa der Wert der Variablen 6 um eins erhöht werden,
          indem das Kommando expr verwendet wird:

          xv6!expr %6 + 1

          Ein etwas komplizierteres Beispiel:

          .w tom
          xv5!cat tom
          !rm tom
          !echo "%5"





Seite 5                      Reliant UNIX 5.44               Gedruckt 11/98

bfs(1)                                                               bfs(1)

          Die aktuelle Zeile wird in die Datei tom geschrieben, dann mit
          cat aus tom gelesen und in der Variablen 5 abgelegt. Anschließend
          wird die Datei tom gelöscht. Die gespeicherte Zeile wird von echo
          ausgegeben.

          Wenn Sie dem Ausrufezeichen ! einen Gegenschrägstrich \ voran-
          stellen, wird die Sonderbedeutung von ! zu Beginn von wert aufge-
          hoben.

          xv7\!date

          legt die Zeichenkette !date in der Variablen 7 ab.

          wert nicht angegeben:

          Die Variable enthält die Nummer der aktuellen Zeile.

     :label
          Ein label ist eine Zeichenkette, die als Sprungziel für die Kom-
          mandos xb, xbn und xbz dient. Sie können ein label in eine Kom-
          mandodatei (siehe xf) schreiben.

          Sie schließen label mit einem Neue Zeile-Zeichen ab. Leerzeichen
          zwischen dem Doppelpunkt : und dem Beginn von label werden igno-
          riert. Mit dem Doppelpunkt-Kommando können Sie auch Kommentare in
          eine Kommandodatei einfügen, da Labels nicht unbedingt Sprung-
          ziele sein müssen.

FEHLERMELDUNGEN
     Ein Fragezeichen ? wird bei fehlerhaften Kommandos ausgegeben, wenn
     sich bfs nicht im *-Modus befindet (siehe ed-ähnliche Kommandos, Kom-
     mando P).

     Selbsterklärende Fehlermeldungen werden ausgegeben, wenn sich bfs im
     *-Modus befindet.

BEISPIELE
     Wirkung eines Labels

     Legen Sie eine Datei tiere an, mit folgenden fünf Zeilen (zur besseren
     Übersicht enthält die Datei Zeilennummern):

     1 Hund
     2 Katze
     3 Maus
     4 Pferd
     5 Kuh







Seite 6                      Reliant UNIX 5.44               Gedruckt 11/98

bfs(1)                                                               bfs(1)

     Zusätzlich wird eine bfs-Kommando-Datei kmdo1 benötigt, aus der später
     Kommandos gelesen werden. Zuerst soll nach einer Zeile gesucht werden,
     in der das Wort Maus steht. Falls Maus nicht gefunden wird, sollen
     alle Zeilen ausgegeben werden, falls Maus gefunden wird, soll die
     Zeile ausgegeben werden, in der Maus steht. Dann soll bfs beendet wer-
     den. Dazu muß die Datei kmdo1 folgenden Inhalt haben:

     1,$xb/Maus/gefunden
     1,$p
     xb/^/fortsetzung
     :gefunden
     .p
     :fortsetzung
     q

     Falls Maus nicht gefunden wird, muß die Anweisung, die aktuelle Zeile
     auszugeben, übersprungen werden, da sonst die letzte Zeile zweimal
     ausgegeben würde: vom Kommando 1,$p (Zeile 2) und vom Kommando .p
     (Zeile 5). Deshalb findet mit xb/^/fortsetzung ein unbedingter Sprung
     über die Zeile 5 statt.

     Nachdem beide Dateien erstellt sind, werden sie wie folgt verwendet:

     $ bfs tiere
     36
     xfkmdo1
     3 Maus
     $

     Als Alternative können Sie entweder in kmdo1 oder in tiere Maus in
     Laus ändern. Dann werden alle Zeilen von tiere ausgegeben.

     Wirkung von xbz und xbn

     Zunächst soll eine Datei fünfmal auf die Zeichenkette Maus durchsucht
     werden. Dazu muß die bfs-Kommandodatei kmdo2 folgenden Inhalt haben:

     xv55
     :1
     /Maus/
     xv5!expr %5 - 1
     ![ %5 != 0 ]
     xbz 1
     q

     Der Ziffern-Variablen 5 wird der Wert 5 zugewiesen. Dann wird die
     erste Zeichenkette Maus gesucht und ausgegeben. Im nächsten Schritt
     wird der Wert in der Ziffern-Variable 5 um 1 erniedrigt. Dann wird
     geprüft, ob der Wert von 5 ungleich 0 ist. Falls ja, wird zum Label 1
     gesprungen. Falls der Wert von 5 gleich 0 ist, wird bfs beendet.




Seite 7                      Reliant UNIX 5.44               Gedruckt 11/98

bfs(1)                                                               bfs(1)

     Es wird wieder die Datei tiere durchsucht.

     $ bfs tiere
     36
     xfkmdo2
     3 Maus
     3 Maus
     3 Maus
     3 Maus
     3 Maus
     $

     Die Zeichenkette Maus wird fünfmal ausgegeben, da mit /.../ über das
     Dateiende hinaus und wieder am Dateianfang beginnend gesucht wird.

     Falls xbn verwendet wird, muß, bei gleichem Ergebnis, kmdo2 so ausse-
     hen:

     xv55
     :1
     /Maus/
     xv5!expr %5 - 1
     ![ %5 = 0 ]
     xbn 1
     q

SIEHE AUCH
     ed(1).


























Seite 8                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026