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
(Installation des Paketes catdoc notwendig).
Da ich viel mit Textdateien und Tabellen 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 '$a###Schlußzeile'
5722
2752
7252
###Schlußzeile

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

Das Schreiben von Zeilen untereinander kann so erfolgen
echo "$vW" <<< echo "$vV"
5722
2752
7252 blaa
alba
laba

Allerdings wird die letzte Zeile der ersten Variablen und die erste Zeile der zweiten Variablen in eine gemeinsame Zeile geschrieben. Daher kann man zunächst bei der ersten Variablen eine neue Zeile erzeugen und danach die, zur Hilfe genommenen, Zeichen der zusätzlichen neuen Zeile wieder herauslöschen. 
Die Möglichkeit das LEERZEICHEN durch einen Zeilenumbruch zu ersetzen würde hier zwar funktionieren aber wenn in den Zeilen weitere LEERZEICHEN vorkommen versagt dieser Weg.

Man kann diese (spaltenartigen) Variablen untereinanderkleben

vZ=$(echo "$(echo "$vW" | sed '$a#')" <<< echo "$vV" | sed 's/^# //')

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 die Ausgabe der Suchergebnisse wird auf 120 Zeichen beschränkt. Dadurch wird es übersichtlicher:

grep --exclude=*.{jpg,png,gif,mp4,ods,odt} -E -rnie "$szSuch" "$szPath" | cut -c 1-120

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 " Bei Excel-txt-Suche sollten \n keine Umlaute eingegeben werden" 2> /dev/null)

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

yA=$(zenity --width="400" --height="200" --title="Welche Datei-Art soll durchsucht werden?" --list --text "mehrere Auswahlen sind möglich" --checklist --column "" --column "" false "Excel txt" false "Libre Office" false "Word")

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

suchTXT=$(echo "$yA" | tr -s '|' | cut -f 1 -d '|')
suchWORD=$(echo "$yA" | tr -s '|' | cut -f 3 -d '|')
suchLIB=$(echo "$yA" | tr -s '|' | cut -f 2 -d '|')
szPath=$(zenity --file-selection --directory --title "In welchem Ordner soll gesucht werden" 2> /dev/null)

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

if [ "$suchTXT" = "Excel txt" ]; then

suTX=$(grep --exclude=*.{jpg,png,gif,mp4,ods,odt} -E -rnie "$szSuch" "$szPath" | cut -c 1-120)

else

suTX="# "

fi

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

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

else

suWO="# "

fi

if [ "$suchLIB" = "Libre Office" ]; then

suLI=$(find "$szPath" -name "*.od*" | while read file
do
unzip -ca "$file" content.xml | grep -qli "$szSuch"
if [ $? -eq 0 ]; then
echo "gefunden " $file
fi
done
)

else

suLI="# "

fi

suA1=$(echo "$(echo "$suLI" | sed '$a#')" <<< echo "$suTX" | sed 's/^# //')
suA2=$(echo "$(echo "$suA1" | sed '$a#')" <<< echo "$suWO" | sed 's/^# //')

zenity --text-info --title="Suchergebnisse" --width=1000 --height=400 2> /dev/null <<< $suA2
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 Doppelklick auf      öffnet sich ein Fenster in dem man  Such-Zeichen eingeben kann. Dies können auch Satzteile sein die Leerzeichen enthalten. Bei 'Libre Office'-Dateien und bei Word-Dateien können die Worte auch Umlaute enthalten. 
Bei 'Excel txt'-Dateien sollten keine Umlaute enthalten sein.

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.

Das Untereinanderkleben kann auch in in anderer Form erfolgen - gleich mit mehreren Variablen auf einmal. Damit erspart man sich im script die zwischengeschaltete Variable suA1
suA2=$(cat <<EOF
$suLI
$suTX
$suWO
EOF
)

zur Übersicht nächste Seite

Datenschutzerklärung
Impressum