Text- und PDF-Dateien durchsuchen

Mittels Grep durchsuchen Sie Textdateien, mit Pdfgrep stattdessen PDF-Dokumente. Beide Programme liefern grundsätzlich den Exitcode 0 bei einem Treffer und 1, falls sie nichts Passendes finden. Die Tabelle "Suchaktionen" fasst die wichtigsten Optionen beider Programme zusammen.

Suchaktionen

Grep Pdfgrep Aktion
-q -q ohne Bildschirmausgabe
-m Zahl -m Zahl maximale Trefferzahl
-l - nur Dateinamen mit Treffern anzeigen
-L - nur Dateinamen ohne Treffer anzeigen
-h -h Anzeige von Dateinamen unterdrücken
-H -H zusätzlich Dateinamen zum Treffer anzeigen
-n - Zeilennummer des Treffers ausgeben
- -n Seitennummer des Treffers ausgeben
-c -c Zahl der Treffer ausgeben
-v - Inverssuche

Listing 4 zeigt, wie Sie Grep in ein Skript einbinden. Die in dem Skript verwendete Textdatei datei1.txt erzeugt das Skript selbst und löscht sie am Schluss auch wieder. Sie besteht lediglich aus zwei nummerierten Zeilen.

Listing 4

#!/bin/bash
# Testdatei erzeugen
echo -e "Zeile 1\nZeile 2" > datei1.txt
echo "-------"
cat datei1.txt
echo "-------"
# Suchbegriff: einstellige Zahl
read -n1 -p "einstellige Zahl eingeben: " a
# Durchsuchen und Folgerung
echo ""
cat datei1.txt | grep -q "$a"
if [ $? -eq 0 ]; then
  echo "Zahl" $a "ist vorhanden"
else
  echo "Zahl" $a "nicht gefunden"
fi
rm -r datei1.txt

Unterschiede ermitteln

Mit dem Werkzeug Diff ermitteln Sie Unterschiede zwischen zwei Textdateien. Das Tool verfügt über einige interessante Optionen, die die Tabelle "Diff-Optionen" zusammenfasst. Der Exit-Code 0 zeigt an, dass die verglichenen Dateien identisch ausfallen, 1 meldet Differenzen.

Diff-Optionen

Option Aktion
-q Ausgabe der Unterschiede unterdrücken
-i Groß/Kleinschreibung ignorieren
-Z führende Leerstellen ignorieren
-E Tabulatoren ignorieren
-w alle Leerstellen ignorieren
-B Leerzeilen ignorieren

Das in Listing 5 gezeigt Skript legt zunächst die beiden nahezu identischen Files A-Datei und B-Datei an (siehe Tabelle "Datensätze"). Beide weisen dieselbe Größe auf – auf diesem Weg lässt sich also kein Unterschied feststellen.

Datensätze

A-Datei B-Datei
Hans Hans
Christian Christian
Anna Bert
Maria Maria

Zuerst vergleicht das Skript die beiden Datensätze durch einen Aufruf von diff (Zeile 6). Dann erstellt es unter dem Namen C-Datei eine Kopie von A-Datei (Zeile 14), die es anschließend mit dem Original vergleicht (Zeile 17). In der Ausgabe sehen Sie also die Ergebnisse von Diff sowohl für unterschiedliche (A vs. B) sowie identische (A vs. C) Dateien.

Zu guter Letzt entsorgt das Skript die nun überflüssigen Testdateien wieder (ab Zeile 25).

Listing 5

#!/bin/bash
echo -e "Hans\nChristian\nAnna\nMaria" > A-Datei
echo -e "Hans\nChristian\nBert\nMaria" > B-Datei
echo -e "Vergleich von A-Datei und B-Datei"
diff -q A-Datei B-Datei
if [ $? -eq 0 ]; then
  echo "Dateien A-Datei und B-Datei sind identisch."
else
  echo ""
fi
# Kopieren A-Datei -> C-Datei
cp A-Datei C-Datei
echo -e "Vergleich von A-Datei und C-Datei"
diff -q A-Datei C-Datei
if [ $? -eq 0 ]; then
  echo "Dateien A-Datei und C-Datei sind identisch."
else
  echo ""
fi
# Aufräumen
for datei in A B C; do
  rm -r $datei-Datei
done

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Verschlungene Pfade
    Mit Schleifen, Fallunterscheidungen und Funktionen programmieren Sie komplexe Skripte auf einfache und elegante Weise.
  • Mehr Komfort
    Von einfachen Abfragen bis hin zu komplexen Menüs: Mit dem Toolkit Dialog bauen Sie eine grafische Oberfläche für Shell-Skripte, die oft nicht mehr als eine zusätzliche Zeile brauchen.
  • Einführung in die Bash-Programmierung
    Skripte sollen meist wiederkehrende oder lästige Arbeiten automatisieren. Die Standard-Shell Bash stellt Ihnen dazu eine ganze Reige von Funktionen bereit. Dieser Artikel erklärt, wie Sie ihre eigenen Shell-Skripte schreiben.
  • Kreislauf
    Schleifen ermöglichen das mehrmalige Abarbeiten von Anweisungen. Dabei kann das begrenzende Ereignis sowohl außerhalb als auch innerhalb der Schleife liegen.
  • Bash-Skripte sind Programme
    Wer regelmäßig mit der Shell arbeitet, wird leicht zum Programmierer: Schreiben Sie mehrere Shell-Befehle in eine Textdatei und machen diese ausführbar, haben Sie schon Ihr erstes Shell-Skript entwickelt. Die Shell bietet als Programmiersprache aber noch viel mehr.
Kommentare
Anmerkung zu $(( ... )) in der bash
Markus (unangemeldet), Sonntag, 19. März 2017 22:47:52
Ein/Ausklappen

Die Variablen innerhalb der doppelten Klammern müssen nicht nochmals mit $ angegeben werden, die bash verträgt auch direkt den Namen:

i=5
echo $((i*2))



Bewertung: 181 Punkte bei 11 Stimmen.
Den Beitrag bewerten: Gut / Schlecht

Infos zur Publikation

LU 12/2017: Perfekte Videos

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Broadcom Adapter 802.11n nachinstallieren
Thomas Mengel, 31.10.2017 20:06, 2 Antworten
Hallo, kann man nachträglich auf einer Liveversion, MX Linux auf einem USB-Stick, nachträglich...
RUN fsck Manually / Stromausfall
Arno Krug, 29.10.2017 12:51, 1 Antworten
Hallo, nach Absturz des Rechners aufgrund fehlendem Stroms startet Linux nicht mehr wie gewohn...
source.list öffnet sich nicht
sebastian reimann, 27.10.2017 09:32, 2 Antworten
hallo Zusammen Ich habe das problem Das ich meine source.list nicht öffnen kann weiß vlt jemman...
Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 6 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...