Categories
Korn Shell / Bash Shell Programmierung

Sehr nützliche grep Funktionen

grep wird von Linuxx/Unix Administratoren zwar sehr oft genutzt, einige sehr mächtige Optionen werden aber zu Unrecht wenig genutzt oder sind den Administratoren nicht bekannt.

1. Zeilen vor und nach der Fundstelle des Suchbegriffs ausgeben.
grep bietet die äusserst nützliche Funktion, Zeilen vor und nach dem gefundenen Suchbegriff anzuzeigen.

Um die Funktionen der grep Optionen darzustellen, verwende ich als Beispiel ein IBM Skript mit folgendem Inhalt, das von grep durchsucht wird:

cat collector.sh

#!/bin/sh
binDir=`dirname ${0}`
. ${binDir}/setupCmdLine.sh
${WAS_HOME}/bin/collector.sh “$@”

Die Option -A zeigt n Zeilen nach der Fundstelle an.

grep -A 1 setup collector.sh

. ${binDir}/setupCmdLine.sh
${WAS_HOME}/bin/collector.sh “$@”

Die Option -B zeigt n Zeilen vor der Fundstelle an.

grep -B 1 setup collector.sh

binDir=`dirname ${0}`
. ${binDir}/setupCmdLine.sh

Die Option -C zeigt n Zeilen vor und nach der Fundstelle an.

grep -C 1 setup collector.sh

binDir=`dirname ${0}`
. ${binDir}/setupCmdLine.sh

2. Farbliches Hervorheben des Suchbegriffs in den Fundstellen
grep kann in einem Terminal den gefundenen Suchbegriff farblich hervorheben. Dazu setzt man die Umgebungsvariable GREP_OPTIONS wie folgt:

export GREP_OPTIONS='--color=auto'

–color=always

wird oft in Blogs erwähnt, aber grep soll die Farben ja nur in interaktiven Terminals hervorheben. Daher empfehle ich die Option --color=auto. Am besten setzt man diese Umgebungsvariable in den Login Dateien (z.B. .bashrc).

3. Nur den Dateinamen mit der Fundstelle bei Suchen in mehreren Dateien ausgeben
grep ermöglicht Suchen in mehreren Dateien und auch rekursiv (Option -r) in Unterverzeichnissen. Wenn der Suchbegriff in vielen Dateien an mehreren Positionen enthalten ist, wird das Ergebnis
schnell unübersichtlich. Die grep Option -l bietet sich in diesen Fällen an. Sie gibt nicht die Zeile mit der Fundstelle aus, sonder zeigt nur den Dateinamen an.

grep -rl suchstring *

Categories
Shell Programmierung

awk – Ändern der Großschreibung in Kleinbuchstaben

Die Funktion tolower in einem awk Skript ändert Grossbuchstaben in Kleinbuchstaben:

awk '{ print tolower($0) }'

Die Funktion toupper in einem awk Skript ändert Grossbuchstaben in Kleinbuchstaben:

awk '{ print toupper($0) }'

Beispiel für AWK Funktion tolower

In diesem Beispiel soll das erste Feld in Kleinbuchstaben ausgegeben werden.

echo ABCDEF GHIJK | awk '{ print tolower($1), $2 }'

abcdef GHIJK

Beispiel für AWK Funktion toupper

In diesem Beispiel soll das erste Feld in Kleinbuchstaben ausgegeben werden.

echo abcdef ghijk | awk '{ print toupper($1), $2 }'

ABCDEF ghijk

Categories
Shell Programmierung

Leerzeilen aus einer ASCII Datei entfernen

Um bei einer Dateianzeige die leeren Zeilen zu entfernen, gibt es verschiedene Möglichkeiten. Ich stelle hier 2 Methoden vor.

Variante 1 verwendet den Unix Befehl grep

grep -v ^$

Variante 2 verwender das Kommando awk.

awk ' NF>0 '

Beispiel für grep
Das verwendete Pattern setzt sich aus einem ^ für den Zeilenanfang und einem $ für das Zeilenende zusammen. Leerzeilen setzen sich ja, bei genauer Betrachtung, aus einem Zeilenanfang sofort gefolgt von einem Zeilenende zusammen.

echo "ABCDEF \n\n GHIJK \n\n\nXYZ" | grep -v ^$

ABCDEF
GHIJK
XYZ

Beispiel für awk

Beim awk wird die interne Variable NF verwendet. NF enth%auml;lt die Anzahl der Felder der aktuellen Zeile. Leerzeilen haben 0 Felder, so das mit der Ausgabe aller Zeilen mit mehr als 0 Feldern alle Leerzeilen entfernt werden.

echo "ABCDEF \n\n GHIJK \n\n\nXYZ" | awk ' NF>0 '

ABCDEF
GHIJK
XYZ