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