Shell Quotes

Meta- Zeichen Unixoider Systeme sind unter Anderem das ‚*‘ oder ‚?‘- Zeichen, beispielsweise im Zusammenspiel mit dem ‚ls‘ Kommando. 

Möchte man solche Zeichen aber in der Ausgabe mit ‚echo‘ oder ‚printf‘ zur Ausgabe benutzen, dann muss man das dem Interpreter der Shell sagen. Das geht indem man dem Zeichen entweder ein ‚\‘ voranstellt oder es in die ‚ bzw. “ Zeichen einschließt:

echo \*

echo ‚*‘

echo „*“

Diese Technik wird als Quoting bezeichnet. Alle drei der oben gezeigten Methoden machen im Prinzip das Selbe. Der Unterschied ist der:

\
Ist die stärkste Form des Quoting.  Für einzelne Zeichen.

 


Strong Quoting
Alle Zeichen werden ausgegeben, auch das ‚$‘. Das heist, Inhalte von Variablen werden nicht berücksichtigt: echo ‚$Hallo‘ hat ‚$Hallo‘ zum Ergebnis.

 


Weak Quoting
Wenn man Meta- Zeichen ausgeben möchte, aber die Inhalte von Variablen und Kommandos (zwischen den ` Zeichen) berücksichtigen möchte, dann sollte man diese Form benutzen: echo „Hallo das ist der Inhalt von $i“. Gibt den angegebenen Text und den Inhalt der Variablen ‚i‘ aus. wenn Sie das so machen: echo ‚Hallo das ist der Inhalt von $i‘ dann ist das Ergebnis: Hallo das ist der Inhalt von $i.

Eine spezielle Bedeutung dabei hat das ` – Zeichen. Es wird nicht als Quote verstanden, sondern als  Kommando- Ersatz:

echo Sie sind im Verzeichnis: `ls`

oder etwa:

echo Heute ist der `date`

 

 

Advertisements

Strings ändern, Unixoide Tools

Zur Verarbeitung von Zeichenketten (Strings) stellen Unixoide System traditionell einige Werkzeuge zur Verfügung. Ich beschreibe hier ein paar davon im Hinblick auf deren Einsatz- Zweck und die jeweiligen Grenzen. Ich bleibe dabei oberflächlich, das geschriebene soll für jedes der Werkzeuge einen Schnelleinstieg möglich machen und ein Gefühl für den Syntax vermitteln.

Grundlagen

Wenn links wiedergegeben werden, dann entspricht das Datum des letzten Aufrufs dem jeweiligen Bearbeitungsstand dieses Blogeintrages.

Alle Beispiele wurden auf einem Mac- Book Pro unter Mac OS X getestet.

Grundsätzlich sind die hier vorgestellten Werkzeuge dazu da, Zeichenketten zu verändern. Andere wichtige, hier nicht behandelte Werkzeuge dienen lediglich der Auswertung von Zeichenketten. Die wichtigsten sind: grep (oft zusammen mit Regulären Ausdrücken: —regexp) und find.

Alle Werkzeuge lesen Zeichen aus einem Eingabestrom (einer Datei) und geben das Ergebniss auf stdout aus. arbeiten nahtlos mit Umleitungen „>“ , „>>“ oder Pipes „|“ zusammen.

tr

Steht für Translate. Eignet sich immer dann, wenn man einzelne Zeichen ändern möchte. Man kann zwar mehr als ein zu änderndes oder zu löschendes Zeichen angeben, die werden aber nicht als zusammenhängendes Wort interpretiert, sondern bleiben einzelne Buchstaben

tr 'a' 'b' < Datei.txt

Wandelt alle „a“ aus der Eingabe Datei in ein „b“ in der Ausgabe.

tr -d 'a' < Datei.txt

„-d“ führt dazu dass alle „a“ gelöscht werden.

tr 'abcd'  'jklm' < Datei.txt

Wenn mehr als ein Zeichen angegeben wird , dann schreibt man die in Anführungszeichen. Hier werden der Reihe nach, alle Buchstaben im ersten Argument durch die Buchstaben im zweiten ersetzt.

Als Bereichs Kennzeichnung darf „-“ benutzt werden: „a-z“ meint alle Zeichen zwischen „a“ und „z“.

Spezielle Zeichen müssen mit „\“ escaped werden: „\n“, „\t“, „\\“ usw.

sed

Abkürzung für Stream Editor. Zwingend, wenn man mehr als ein Zeichen manipulieren möchte. Erlaubt Reguläre Ausdrücke.

sed 's/Hallo/hi/g' test.txt > changed.txt

Ersetz alle „Hallo“ in „test.txt“ nach „hi“ und schreibt das Ergebnis in die Datei „changed.txt“. Das „s“ vor dem ersten „/“ heist ’substitute‘ das „g“ nach dem letzten „/“ heist „globally“ und meint das alle in „test.txt“ vorkommenden „Hallo“ ersetz werden sollen. Wenn man das „g“ weglässt, wird jeweils nur das erste in einer Zeile vorkommende „Hallo“ ersetzt.

awk

Mächtig, Vorfahre von Perl. Wie sed für die Manipulation längerer Zeichenketten geeignet. Wichtigstes Merkmal: Arbeiten Zeilen und Spaltenorientiert. Das heist, eine Zeile wird aus der Eingabe bis „/n“ gelesen. Die Leerzeichen werden als Trenner zwischen den Spalten interpretiert. Die Spalten lassen sich mit „$n“ auslesen.