next_inactive up previous


Textbearbeitung im Befehlsfenster

Achim Stein

Zusammenfassung:

Hier wird erklärt, wie mit einigen Befehlen auf der Kommandozeile Text verändert werden kann (Umformatieren, Suchen und Ersetzen, Wortlisten). Dabei werden unterschiedliche Betriebssysteme berücksichtigt (Linux, Windows, Mac).

Diese Dokumentation ist noch in Arbeit! (Version 7. Juli 2011)


Inhalt

1 Grundlagen: Shell und Arbeitsumgebung

1.1 Befehlsfenster und Kommandozeile

Jedes Betriebssystem kann über Kommandos gesteuert werden, die im Befehlsfenster eingegeben werden (man sagt auch »über die Kommandozeile« oder »in einer Shell«). Das Befehlsfenster ist über das Startmenü aufrufbar, oft unter einer Kategorie wie »Zubehör« oder »Dienstprogramme«.

Unix und Windows: In dieser Anleitung werden Befehle benutzt, die auf Unix-Betriebssystemen vorinstalliert sind. Linux und Mac OS X sind Unix-Systeme und erfordern meist keine zusätzlichen Installationen. Sie verwenden in der Regel die sogenannte Bash-Shell.

Unter Windows können diese Befehle zwar auch als einzelne Programme nachinstalliert (und dann in der »Eingabeaufforderung« benutzt) werden, aber es ist einfacher und komfortabler, sich unter Windows ein komplettes »Unix-Terminal« zu beschaffen, also eine Bash-Shell. Die in dieser Anleitung beschriebenen Befehle können dann unter allen Systemen nahezu gleich eingegeben werden.

TIPP: Cygwin installieren. Dieses Paket ist kostenlos und enthält eine Reihe von Unix-Programmen für Windows. Die Installation ist einfach:
  • http://www.cygwin.com aufrufen
  • Auf das Logo »install or update Cygwin now!« (rechts) klicken, um das Setup-Programm (setup.exe) herunterzuladen.
  • Das Setup-Programm ausführen und alle Optionen bestätigen (mit »OK« oder »Weiter«), an einem Punkt muss unter »Mirror Sites« ein Server für das Herunterladen ausgewählt werden: am besten einen in der Nähe wählen (.de). Damit wird Cygwin auf der Festplatte unter C:\cygwin installiert (ca. 80MB).
  • Auf dem Desktop (und/oder im Programm-Menü) erscheint ein Symbol für die Cygwin Bash Shell, mit dem nun das Unix-Befehlsfenster gestartet werden kann.

Im folgenden wird das Befehlsfenster kurz Shell genannt.


1.2 Erste Schritte in der Shell

Grundlegende Befehle: In den Beschreibungen der Befehle stehen obligatorische Argumente zwischen Spitzklammern, z.B. <Verzeichnisname>, und Optionen zwischen eckigen Klammern, z.B. [-a].

Befehl Beispiel Funktion
exit   Terminal beenden
Ctrl-c   laufenden Befehl unterbrechen
mkdir <name> mkdir meine_texte ein Verzeichnis anlegen
cd <name> cd meine_texte in ein (Unter)verzeichnis wechseln
cd .. cd meine_texte ins nächsthöhere Verzeichnis wechseln
ls [-l] [<name>] mkdir meine_texte Verzeichnisinhalt anzeigen (-l ausführlich)
pwd   Pfad des aktuellen Verzeichnisses anzeigen

Ein Arbeitsverzeichnis erstellen: Für die konkrete Arbeit an einem Text ist es empfehlenswert, ein eigenes Verzeichnis zu erstellen. In der Verzeichnisstruktur der Shell werden Pfadnamen durch einfachen Schrägstrich / getrennt, und nicht, wie in Windows, durch einen Backslash \.

Wenn das Befehlsfenster gestartet wird, befindet sich der Benutzer im Home-Verzeichnis. Die Shell symbolisiert es durch eine Tilde.

Komfort in der Shell: Bei langen Datei- oder Pfadnamen macht man oft Tippfehler. Die Shell bietet eine Erleichterung über die Tabulatortaste (TAB) an: Tippen Sie den Anfang eines Verzeichnis- oder Dateinamens, drücken Sie TAB, und die Shell wird den Namen ergänzen (oder bei mehreren Möglichkeiten diese anzeigen). Tippen Sie z.B. cd /cy, dann TAB, und die Shell ergänzt zu /cygdrive/, usw.

Arbeitsverzeichnis: Im gewünschten Verzeichnis angekommen, sollte dann ein eigenes Verzeichnis angelegt werden, z.B. mit mkdir spielwiese. Es erscheint dann wie gewohnt im Dateimanager des Sytems, wie in Abb. 1 und 2 gezeigt (es könnte natürlich auch mit dem Dateimanager angelegt werden).

Abbildung 1: Cygwin in Windows XP: Arbeitsverzeichnis erstellen
Image cygwin-winxp
Abbildung 2: Cygwin in Windows 7: Arbeitsverzeichnis erstellen
Image cygwin-win7

TIPP: In vielen Betriebssystemen zeigen die grafischen Dateimanager deutsche (oder der eingestellten Sprache entsprechende) Pfadnamen an, verwenden intern aber andere Namen. Mac OS X und Windows 7 zeigen ein Verzeichnis /Benutzer bzw. C:\Benutzer an, verwenden Intern aber /Users bzw. C:\Users. Analog für Schreibtisch bzw. Arbeitsplatz (Desktop) u.a. Die Shell zeigt immer die internen (englischen) Namen, und diese müssen auch bei Befehlen wie cd usw. eingegeben werden.

Als Arbeitstext für die nächsten Schritte besorgen wir uns »Betrachtung« von Franz Kafka, der auf http://www.gutenberg.orgfrei herunterladbar ist. Wir laden ihn im Format »Plain Text« und speichern ihn im Verzeichnis spielwiese als kafka.txt. Sie können ihn auch hier erhalten: kafka.txt.


2 Die Befehle


2.1 Grundlagen

Es schadet nicht, die hier erklärten Grundlagen vorher zu lesen. Praktische Beispiele folgen bei der Erklärung der Befehle, Praktiker werden dort anfangen und dann zurückblättern.


2.1.1 Befehlssyntax und Dateinamen

Befehlssyntax: Die meisten Befehle haben Optionen. Diese bestehen aus Bindestrich mit einem folgenden Buchstaben (Kurzform), manchmal auch zwei Bindestrichen mit einem Optionsnamen (Langform), und ggf. Argumenten. Danach folgt in der Regel der Dateiname. Beispiele s.u. bei 2.2.1.

Dateinamen sind Zeichenketten, z.B. kafka.txt. Sonderzeichen und Leerzeichen sind in den meisten Betriebssystemen möglich, von ihrer Verwendung ist aber abzuraten (Betriebssysteme kodieren die Sonderzeichen unterschiedlich, und bei der Übermittlung im Internet können sie ebenfalls verändert werden).

Viele Befehle können mehrere Dateien gleichzeitig aufrufen. Dafür können Platzhalter eingesetzt werden, die ähnlich wie beim Befehl grep funktionieren, nur der Platzhalter für 'irgendetwas' ist * (und nicht .*). Beispiele:

* alle Dateien (im aktuellen Verzeichnis)
a* alle Dateien, deren Name mit a beginnt
*.txt alle Dateien mit Suffix .txt beginnt


2.1.2 Verketten, anzeigen, umleiten

Mit einer sog. pipe (>Röhre<) können Befehle verkettet werden. Die pipe ist ein senkrechter Strich zwischen zwei Befehlen, also:

befehl1 datei | befehl2

Hier bearbeitet der erste Befehl die Datei. Das Ergebnis wird nicht angezeigt, sondern direkt vom zweiten Befehl verarbeitet. Man spart sich also die Erstellung einer Zwischendatei, die dann vom zweiten Befehl extra aufgerufen werden müsste.

Die Ausgabe eines Befehls wird normalerweise am Bildschirm angezeigt. Bei großen Dateien ist dies nicht praktisch. Es gibt zwei Möglichkeiten, die Ausgabe zu studieren:

Bei der Umleitung in eine Datei mit > wird die Datei im Verzeichnis angelegt und kann dann im Editor (oder mit cat) angezeigt werden:

befehl > datei

Vorsicht! Wenn schon eine Datei mit diesem Namen existiert, wird sie ohne Warnung überschrieben.

Die zweite Möglichkeit ist, die Datei Bildschirm für Bildschirm anzuzeigen, mit less:

befehl | less

Der erste Bildschirm wird angezeigt, unten steht ein Doppelpunkt für die Eingabe, dort kann mit der Leertaste weitergeblättert oder mit q abgebrochen werden.

TIPP: Mit less sind auch einfache Suchen möglich:


2.2 Einfache Textmanipulationen

Das erste Ziel ist, aus dem Beispieltext kafka.txt eine Frequenzliste zu machen. Dafür sind vier Befehle nötig.


2.2.1 cat

cat (concatenate) gibt eine oder mehrere Dateien hintereinander aus.

cat kafka.txt oder cat *.txt

Mit Option -n werden die Zeilen numeriert

cat -n kafka.txt

Mit einem Platzhalter und einer Umleitung können schnell z.B. alle Textdateien aneinandergehängt werden:

cat *.txt > alle-texte

TIPP: Hier sind natürlich nicht alle Möglichkeiten der Befehle erklärt. Im Internet gibt es gute Einführungen zu Unixbefehlen. Aber auch direkt in der Shell kann für fast jeden Befehl eine Hilfeseite mit man (manual) aufgerufen werden:

man <befehl>, z.B. man cat

Die Hilfeseite wird dann bildschirmweise angezeigt, wie mit less (s. 2.1.2).


2.2.2 tr: einzelne Zeichen ersetzen/löschen

tr (translate) übersetzt einzelne Zeichen, die in seinen beiden Argumenten angegeben werden. Wegen der beiden Argumente wird tr nicht mit Dateinamen aufgerufen, sondern wird an cat angehängt. Der folgende Aufruf ersetzt in der Beispieldatei alle a durch b:

cat kafka.txt | tr a b

In beiden Argumenten können mehrere Zeichen angegeben werden. Die Ersetzungspaare werden dann jeweils aus den ersten, zweiten usw. Zeichen gebildet. Die Großbuchstaben A, B, C, D, E werden mit folgendem Befehl durch Kleinbuchstaben ersetzt:

cat kafka.txt | tr ABCDE abcde

Außerdem können solche Reihen abgekürzt werden, etwa [A-Z] für alle Großbuchstaben, [a-z] für alle Kleinbuchstaben und [0-9] für alle Zahlen. Diese Ausdrücke sollten dann in Hochkommata stehen. Alle Großbuchstaben werden also durch folgenden Befehl klein geschrieben:

cat kafka.txt | tr '[A-Z]' '[a-z]'

Mit der Option -d (delete) werden die Zeichen des einzigen Arguments gelöscht. Der folgende Befehl löscht alle Satzzeichen:

cat kafka.txt | tr -d '[\.,;:!\?«»]'

Für die Frequenzliste sollten die Satzzeichen entfernt werden, aber darüberhinaus muss der Text in eine Wortliste verwandelt werden. Das heißt: Alle Leerzeichen werden durch Zeilenschaltungen ersetzt. Auch zur Markierung des Leerzeichens sind Hochkommata nötig, die Zeilenschaltung wird unter Unix als \12 geschrieben. Die »Wortliste« (eigentlich nur ein vertikal Wort für Wort geschriebener Text) entsteht also durch:

cat kafka.txt | tr ' ' '\n'

2.2.3 sort

sort sortiert die Zeilen einer Datei alphabetisch. Angewendet auf die Wortliste ergibt dies die Befehlskette:

\verb#$ cat kafka.txt | tr ' ' '\n' ] sort
...
zwingen,
zwingt
zwinkerte,
zwischen
zwischen
zwischen
zwischen
$

Das Ende der Ausgabe zeigt uns erstens, dass wir die Satzzeichen noch herausnehmen sollten. Dafür hängen wir den Befehl von oben ein:

cat kafka.txt | tr -d '[\.,;:!\?«»]' | tr ' ' '\n' ] sort

Zweitens müssen die gleichen Formen zusammengefasst und dabei gezählt werden.

2.2.4 uniq

Mit uniq werden gleiche Zeilen der Eingabe zusammengefasst, mit uniq -c werden die zusammengefassten Zeilen gezählt. Die resultierende Frequenzliste wird in eine Datei geschrieben.

cat kafka.txt | tr -d '[\.,;:!\?«»]' | tr ' ' '\n' ] sort | uniq -c > kafka.frq


2.3 Weitere Befehle

2.3.1 wc

wc (word count) gibt die Anzahl der Zeilen, Wörter und Zeichen in einer oder mehreren Dateien aus, z.B.

$ wc kafka.txt       
    1285    9022   58303 kafka.txt

Mit den Optionen -l, -w und -c kann die Ausgabe auf einen bestimmten dieser Werte beschränkt werden. Wenn mehrere Dateien aufgerufen werden, z.B. wc -w *.txt wird eine Liste aller Dateien mit dem/den entsprechenden Wert(en) erstellt.

BIS HIER FERTIG -- NICHT WEITERLESEN :-)

2.3.2 head / tail

2.3.3 cut

2.3.4 join


2.4 Umgang mit Dateien

2.4.1 ls: Verzeichnisse auflisten

2.4.2 rm, mv: Löschen, Bewegen und Umbenennen

2.4.3 zip und gzip: Komprimieren

2.4.4 find


2.5 Komplexeres Suchen und Ersetzen


2.5.1 grep: Zeilen suchen

Das Programm grep ist ein Suchprogramm, das eine Datei nach einem Suchausdruck durchsucht und alle Zeilen ausgibt, die auf diesen Ausdruck passen. Dies Syntax ist

grep [Optionen] 'Suchausdruck' Datei

Die Suche nach ``Garten'' im Kafka-Text gibt drei Zeilen aus:

$ grep 'Garten' kafka.txt 
Ich hörte die Wagen an dem Gartengitter vorüberfahren, manchmal sah ich
den Bäumen im Garten meiner Eltern.
öffne und daß in einem Garten die Musik noch spielt.

Sehr vielseitig ist grep durch die Möglichkeit, sogenannte reguläre Ausdrücke zu benutzen. Das sind Ausdrücke mit Platzhaltern.

Befehl Bedeutung Suchausdruck Findet...
. beliebiges Zeichen b.ten baten, beten, boten
+ vorhergehendes Zeichen min. einmal be*ten beten, beeten, beeeten, ...
* vorhergehendes Zeichen beliebig oft be*ten bten, beten, beeten, beeeten, ...
also: .* beliebige Zeichen b.*ten beten, bluten, bearbeiten
[ ] mögliche Zeichen an einer Position b[eo]ten beten, boten, aber nicht buten
(TABELLE IST NOCH NICHT VOLLSTÄNDIG)


2.5.2 sed: Ersetzen von Zeichenketten

ein Leerzeichen vor jedes Satzzeichen stellen:

cat kafka.txt | sed -e 's/\([\.,;:!\?«]\)/ \1/g'

Um auch die Anführungszeichen zu berücksichtigen, müssen zwei Ersetzungsausdrücke kombiniert werden. Man könnte zwei sed-Befehle aneinanderhängen, aber effektiver ist es, sed nur einmal aufzurufen und zwei Ausdrücke jeweils mit der Option -e anzugeben. Im Beispiel wird ein Leerzeichen vor jedem Satzzeichen eingefügt und ein Leerzeichen nach dem öffnenden Anführungszeichen:

cat kafka.txt | sed -e 's/\([\.,;:!\?«]\)/ \1/g' -e 's/\([»]\)/\1 /g'

Über dieses Dokument ...

Textbearbeitung im Befehlsfenster

This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.71)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html -split 0 -dir latex2html -show_section_numbers -local_icons shell-anleitung.tex

The translation was initiated by Achim Stein on 2011-07-07


next_inactive up previous
Achim Stein 2011-07-07