HaCeMei
Anmeldungsdatum: 2. August 2010
Beiträge: 2265
|
Mit grep kann ich keine Sonderzeichen bzw. "ß" suchen/ finden. Ich habe nach der Seite Spracheinstellungen überprüft, ob die Zeichencodierung im Terminal stimmt. Das sieht dann so aus. < /etc/default/console-setup grep CODESET
CODESET="Lat15" Wie kann ich grep entsprechend bedienen/ konfigurieren? Es muss gehen, denn im midnight commander kann ich unter "Datei finden" den Inhalt von Dateien durchsuchen. Wenn ich dort "All charsets" anwähle wird grep gestartet und findet auch Umlaute.
|
Benno-007
Anmeldungsdatum: 28. August 2007
Beiträge: 29240
Wohnort: Germany
|
Poste doch mal so eine Ausgabe und Eingabe, wo man mehr draus erkennen kann.
|
HaCeMei
(Themenstarter)
Anmeldungsdatum: 2. August 2010
Beiträge: 2265
|
In einem Verzeichnis mit doc-, odt-, pdf-Dateien gebe ich ein grep erdem * Grep findet alle Dateien, die diese Zeichenfolge enthalten. Tatsächlich enthalten die gefundenen Dateien das Wort "außerdem" Gebe ich aber ein
grep außerdem * , wird nichts gefunden. Bei txt-, csv- und html-Dateien tritt das Problem nicht auf.
|
themroc
Anmeldungsdatum: 5. November 2006
Beiträge: 1551
Wohnort: JWD bei Berlin
|
Naja, dann schau doch mal in deine doc-, odt-, pdf-Dateien mit einem Texteditor rein. Ich behaupte, du wirst da außerdem nicht finden. Dann kann grep es natürlich auch nicht finden. In doc-, odt-, pdf-Dateien wirds du außer Hyroglyphen nichts erkennen. Erst docx-Dateien haben den Text in nicht binärer Form mit drin.
|
HaCeMei
(Themenstarter)
Anmeldungsdatum: 2. August 2010
Beiträge: 2265
|
Ja, so habe ich bisher auch gedacht und mich einfach damit zufrieden gegeben. Jedoch "grept" der midnight commander meine Verzeichnisse durch - und wird fündig wenn "search AllCharsets" angewählt ist. Ich suche nun eine Möglichkeit, diese Funktion direkt in grep aufzurufen.
|
themroc
Anmeldungsdatum: 5. November 2006
Beiträge: 1551
Wohnort: JWD bei Berlin
|
Im Prinzip müsste es mit dem Bash-Skript aus Skripte/Zeichensatzkonvertierung gehen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | #!/bin/bash
#
# encoding-finder.sh
# (C) GPLv3, Stefan Wagner 2007
#
# In einer Datei einen bekannten (Teil-)String (z.B.: Begrüßung) suchen,
# indem alle Encodings ausprobiert werden.
#
[[ $# -ne 2 ]] && echo "Usage: encoding-finder.sh FILE PATTERN_WITH_UMLAUT_FOR_SURE_IN_FILE" && exit
FILE=$1
PATTERN=$2
for enc in $( iconv -l | sed 's/..$//')
do
iconv -f $enc -t UTF-8 $FILE 2>/dev/null | grep $PATTERN && echo $enc
done
|
Wobei dich nicht die Kodierung, sondern der File interessiert. Du müsstest es also irgendwie umbauen.
|
HaCeMei
(Themenstarter)
Anmeldungsdatum: 2. August 2010
Beiträge: 2265
|
Also, da komme ich jetzt deutlich an meine Grenzen. Ich muss erst mal schauen, wie man ein Skript richtig startet. Danke für den Hinweis.
|
themroc
Anmeldungsdatum: 5. November 2006
Beiträge: 1551
Wohnort: JWD bei Berlin
|
Ich habe ein bisschen rumgeschrieben, aber es funktioniert noch nicht. Leider habe ich gerade auch nicht so viel Zeit. Im Prinzip kannst du den Inhalt in eine neue Datei packen und dann ausführbar machen und rumprobieren.
|
themroc
Anmeldungsdatum: 5. November 2006
Beiträge: 1551
Wohnort: JWD bei Berlin
|
Ach so, starten kannst du es in der Konsole dann einfach mit
./skriptname
oder
/absoluterPfad/skriptname
|
HaCeMei
(Themenstarter)
Anmeldungsdatum: 2. August 2010
Beiträge: 2265
|
Also, das Skript führt jetzt noch nicht weiter. Ich habe in FILE eine Testdatei eingetragen und unter PATTERN "außerdem". Unabhängig davon, ob die Datei tatsächlich "außerdem" enthält oder nicht, kommt folgende Ausgabe:
Usage: encoding-finder.sh FILE PATTERN_WITH_UMLAUT_FOR_SURE_IN_FILE
|
HaCeMei
(Themenstarter)
Anmeldungsdatum: 2. August 2010
Beiträge: 2265
|
Die Lösung für odt-Dateien findet sich hier (Skript von Benjamin Zimmer): http://www.zeroathome.de/wordpress/viele-openoffice-dokumente-nach-begriff-durchsuchen/ Abgewandelt funktioniert das Skript auch für doc-Dateien, allerdings muss zunächst catdoc installiert sein. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | #!/bin/bash
if [ $# -ne 2 ]; then
echo "Benutzung: searchdoc pfad ausdruck"
exit 1
fi
find $1 -name "*.doc" | while read file
do
catdoc "$file" | grep -qli "$2"
if [ $? -eq 0 ]; then
echo "Suchbegriff gefunden in " $file
fi
done
|
Wenn man das unter searchdoc abspeichert, kann man es unter ./searchdoc Pfad/zu/Dateien Gesuchter_Ausdruck aufrufen.
|
themroc
Anmeldungsdatum: 5. November 2006
Beiträge: 1551
Wohnort: JWD bei Berlin
|
HaCeMei schrieb: Also, das Skript führt jetzt noch nicht weiter. Ich habe in FILE eine Testdatei eingetragen und unter PATTERN "außerdem". Unabhängig davon, ob die Datei tatsächlich "außerdem" enthält oder nicht, kommt folgende Ausgabe:
Usage: encoding-finder.sh FILE PATTERN_WITH_UMLAUT_FOR_SURE_IN_FILE
Die Usage Ausgabe kommt dann, wenn das Skript mit zu wenig oder zu viel Parametern aufgerufen wurde. Ansonsten verstehe ich nicht, warum der Moderator diesen Beitrag nicht endlich in Shell und Programmieren verschiebt, den dort gehört er ja hin. Dort findet sich eventuell eher jemand der sich schonmal mit dem Problem befasst hat.
|
HaCeMei
(Themenstarter)
Anmeldungsdatum: 2. August 2010
Beiträge: 2265
|
themroc schrieb: Ansonsten verstehe ich nicht, warum der Moderator diesen Beitrag nicht endlich in Shell und Programmieren verschiebt, den dort gehört er ja hin. Dort findet sich eventuell eher jemand der sich schonmal mit dem Problem befasst hat.
Ja, scheint mir auch so - habe ich aber noch nicht erkannt, als ich den Thread gestartet habe. Mit dem Skript unter Beitrag 13 ist die Sache aber für mich eigentlich erledigt. Vielen Dank für alle Antworten!
|
HaCeMei
(Themenstarter)
Anmeldungsdatum: 2. August 2010
Beiträge: 2265
|
Die richtige Lösung habe ich hier gefunden. Sie lautet LC_ALL=de_DE.utf8 grep SUCHWORT *.* Gruß, HaCeMei
|
Benno-007
Anmeldungsdatum: 28. August 2007
Beiträge: 29240
Wohnort: Germany
|
Bei mir funktioniert es ohne Probleme ohne Anpassungen:
$ echo ä | grep ä
ä
$ echo ß | grep ß
ß
$
locale ist Standard:
$ locale
LANG=de_DE.UTF-8
LANGUAGE=de_DE:en
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=
Ebenfalls Ubuntu 10.04.
|