zur Übersicht nächste Seite

Suchfunktion verbessert

Die Ausführungen der ersten Seite über Programmfenster werden hier weitergeführt.
Generell gilt bei den weißen Textstellen auf dieser Seite: Man fügt die Zeichenfolge aus dem weißen Feld bei dem blinkenden Cursor des Terminals ein - dann drückt man die Eingabetaste. 
Oder man fügt die Zeichenfolge aus dem weißen Feld bei dem blinkenden Cursor des Editors ein.  
Dann drückt man zum Abspeichern gleichzeitig Strg und O 
dann drückt man die Eingabetaste um den Dateinamen zu bestätigen 
dann drückt man zum Verlassen des Editors gleichzeitig Strg und X.


Auf der ersten Seite mit Programmfenstern wurde eine Suchfunktion angesprochen.
Die Installation des Paketes catdoc ist notwendig.
Dieses Paket enthält auch einen Terminalbefehl
xls2csv
mit dem xls-Excel-Dateien in csv-Dateien konvertiert werden. 

Es gibt auch ein weiteres Paket xlsx2csv mit dem xlsx-Dateien in csv-Dateien konvertiert werden. 

Da ich viel mit Textdateien und Tabellen (Libre Office und xls) arbeite ist es für mich vorteilhaft eine solche Suchfunktion zu haben. Hier wird eine Verbesserung beschrieben. Denn manchmal ist es wünschenswert mehrere Datei-Arten gleichzeitig zu durchsuchen

Man kann dann die Kästchen anklicken um die gewünschten Dateiarten zu bestimmen. 

Es wird zunächst etwas über (spaltenartige) Variablen notiert.
Dazu wird schnell eine erzeugt, mit dem sed-Baustein 
Leerzeichen wird in Zeilenumbruch verwandelt:
cV="blaa alba laba"

vV=$(echo "$cV" | sed 's| |\n|g')

echo "$vV"
blaa
alba
laba

Dann wird eine zweite erzeugt indem man die Zeichen von "$vV" durcheinanderwirbelt
vW=$(echo "$vV" | sed -e 'y|abl|257|')

echo "$vW"
5722
2752
7252

Man kann diese (spaltenartigen) Variablen aneinanderkleben

paste <(echo "$vW") <(echo "$vV")

Man kann Zeilen einfügen, 
nach vorhandenen Zeilen die 72 enthalten
echo "$vW" | sed '/72/ a ###danach'
5722
###danach
2752
7252
###danach

Man kann Zeilen einfügen,
vor vorhandenen Zeilen die 72 enthalten
echo "$vW" | sed '/72/ i ###davor'
###davor
5722
2752
###davor
7252

Man kann eine neue Zeile an das Ende setzen
echo "$vW" | sed '$ s|$|\n###Schlußzeile|'

echo "$vW" | sed '$a###Schlußzeile'
5722
2752
7252
###Schlußzeile

Man kann eine neue Zeile an den Anfang setzen
echo "$vW" | sed '1 s|^|###Anfangszeile\n|'

echo "$vW" | sed '1i###Anfangszeile'
###Anfangszeile
5722
2752
7252

Man kann diese (spaltenartigen) Variablen untereinanderkleben

vZ=$(cat <(echo "$vW") <(echo "$vV"))

echo "$vZ"

Dieses Untereinanderkleben wird später verwendet.

Eine weitere Verbesserung wird sein, daß kein Zugriff auf externe scripte (wie ~/.searchodt und ~/.searchdoc) oder TMP-Dateien erfolgt und somit kein Löschen der TMP-Dateien mehr nötig ist. Alles wird in einem script hinterlegt. 
Desweiteren wird die Suchfunktion für Text-Dateien verbessert, denn es sollen keine Bild-Dateien (auch ods und odt enthalten Vorschaubilder) oder gar mp4-Dateien durchsucht werden. Andere Ausnahmen können Sie schnell hinzufügen, etwa Musik-Dateien. Dies kostet unnötige Suchzeit. Und bei der Ausgabe der Suchergebnisse wird eine kleine Umgebung des Suchbegriffs innerhalb der Datei angezeigt. 

Die Suchzeichen bei Großbuchstaben werden auch als Kleinbuchstaben verstanden und umgekehrt. Z.B. ergibt die Suche nach
auto
nicht nur Ergebisse wie autonom sondern auch AUTO aUTO Auto ..

Auf der ersten Seite mit Programmfenstern wurde das script scS.sh im Ordner ~/Bla abgelegt. Man kann dieses umbenennen. Das verbesserte script wird jetzt mit dem alten Namen wieder neu im Ordner ~/Bla erzeugt:
nano ~/Bla/scS.sh
Eingabe in den Editor:
#!/bin/bash

szSuch=$(zenity --title="Such-Zeichen eingeben" --width="400" --entry --text "auch durch Leerzeichen getrennte Worte sind möglich")

if [ $? -ne 0 ]; then
exit
fi

yA=$(yad --width="400" --height="200" --title="Welche Datei-Art soll durchsucht werden?" --form --text "mehrere Auswahlen sind möglich" --field="TEXT htm":CHK --field="Libre Office":CHK --field="Word":CHK --field="xls excel":CHK )

if [ $? -ne 0 ]; then
exit
fi

suchTXT=$(echo "$yA" | cut -f 1 -d '|')
suchWORD=$(echo "$yA" | cut -f 3 -d '|')
suchLIB=$(echo "$yA" | cut -f 2 -d '|')
suchXLS=$(echo "$yA" | cut -f 4 -d '|')
szPath=$(zenity --file-selection --directory --title "In welchem Ordner soll gesucht werden")

if [ $? -ne 0 ]; then
exit
fi

if [ "$suchTXT" = "TRUE" ]; then

suTX=$(grep --exclude=*.{jpg,png,gif,mp4,ods,odt,xls,xlt} -E -rie "$szSuch" "$szPath" | sed 's/:/: /1' | sed "s/^\([^:]*: \).*\(........$szSuch.*\)$/\1 \2/i" | cut -c 1-120)

else

suTX=" "

fi

if [ "$suchXLS" = "TRUE" ]; then

suXL=$(find "$szPath" -name "*.xls" | while read file
do
xls2csv "$file" | grep -qli "$szSuch"
if [ $? -eq 0 ]; then
echo $file: $(xls2csv "$file" | grep -im 1 "$szSuch" | sed "s/^.*\(..............$szSuch............\).*/\1/i" | cut -c 1-80 )
fi
done
)

else

suXL=" "

fi

if [ "$suchWORD" = "TRUE" ]; then

suWO=$(find "$szPath" -name "*.doc" | while read file
do
catdoc "$file" | grep -qli "$szSuch"
if [ $? -eq 0 ]; then
echo $file: $(catdoc "$file" | grep -im 1 "$szSuch")
fi
done
)

else

suWO=" "

fi

if [ "$suchLIB" = "TRUE" ]; then

suLI=$(find "$szPath" -name "*.od*" | while read file
do
unzip -ca "$file" content.xml | grep -qli "$szSuch"

if [ $? -eq 0 ]; then
echo $file: $(unzip -ca "$file" content.xml | sed "s/<[^>]*>//g" | grep -im 1 "$szSuch" | sed "s/^.*\(..............$szSuch............\).*/\1/i" | cut -c 1-100 )
fi
done
)

else

suLI=" "

fi

suA2=$(cat <(echo "$suLI") <(echo "$suTX") <(echo "$suWO") <(echo "$suXL"))

zenity --text-info --title="Suchergebnisse" --width=1000 --height=400 2> /dev/null <<< $suA2 & yB=$(yad --title="Ergebnisse weiter durchsuchen" --columns="1" --form --align=center --field="weiter suchen":CE --field="OHNE Zeichen":CE --button="Ergebnisse eingrenzen")

if [ $? -ne 0 ]; then
exit
fi

IFS="|" read szSU szNICHT <<< "$yB"

if [[ -n "$szNICHT" ]] && [[ -n "$szSU" ]]; then
suA3=$(echo "$suA2" | grep -v "$szNICHT" | grep "$szSU")

elif [[ -z "$szNICHT" ]] && [[ -n "$szSU" ]]; then
suA3=$(echo "$suA2" | grep "$szSU")

elif [[ -n "$szNICHT" ]] && [[ -z "$szSU" ]]; then
suA3=$(echo "$suA2" | grep -v "$szNICHT")

else
suA3=$(echo "KEINE FILTER GEWÄHLT")

fi

zenity --text-info --title="Suchergebnisse gefiltert" --width=1000 --height=400 <<< $suA3
Nun muß man diese Datei ausführbar machen:
chmod +x ~/Bla/scS.sh
Mit Rechtsklick auf die Datei wählt man wieder Eigenschaften.
Dann vergibt man einen Namen, hier etwa 
Suche
Für das Icon wählt man die Datei C6.png aus dem Ordner Bla, dann schließt man das Eigenschaften-Menü. 
Nach Rechtsklick auf      und Ausführen öffnet sich ein Fenster in dem man  Such-Zeichen eingeben kann. Dies können auch Satzteile sein die Leerzeichen enthalten oder auch Umlaute enthalten. 

Nach Klicken auf OK öffnet sich ein Fenster in dem die Datei-Art bestimmt werden kann.

Nach Klicken auf OK öffnet sich ein neues Fenster in dem man einen Ordner bestimmen kann in dem anschließend gesucht wird.

Danach beginnt die Suche und die Ergebnisse werden angezeigt.
Gleichzeitig öffnet sich ein zweites Fenster durch das man die Suchergebnisse weiter verfeinern kann.



Man kann den Eintrag einer gefundenen Datei markieren (kopieren). Dann kann man die Tasten Alt und F2 drücken. Es öffnet sich ein Eingabefenster.

Dort kann man den Text einfügen und die Eingabetaste drücken. Dann wird die gefundene Datei geöffnet.

Das Untereinanderkleben kann auch in in anderer Form erfolgen
suA2=$(cat <<EOF
$suLI
$suTX
$suWO
EOF
)
Das Untereinanderkleben kann sogar noch anders erfolgen
suA2=$(echo -e "$suLI\n$suTX\n$suWO")

zur Übersicht nächste Seite

Datenschutzerklärung
Impressum