Grep: Finden Sie alle möglichen Fälle eines Wortes in der Textdatei

Grep: Finden Sie alle möglichen Fälle eines Wortes in der Textdatei

Ich habe ein Verzeichnis mit vielen Textdateien.

Von diesen Dateien interessiere ich mich für das Wort „abcdefghi“. Ich muss alle möglichen Fälle dieses Wortes auflisten, wie zum Beispiel

  • Abonnieren
  • abcdefghI
  • abcDefghi
  • ABCDEFGHI

und alle anderen möglichen Kombinationen.

Ist das mit grepoder möglich egrep?

Ich weiß, ich kann ein Shell-Skript mit Kombinationen aus grep und inversem grep schreiben, eindeutig sein und die Ausgaben erzielen, aber ich suche nach einer portablen Lösung.

Antwort1

Versuchen Sie mit GNU grepFolgendes:

grep -io -- 'abcdefghi' *.txt

Ich bin davon ausgegangen, dass alle Dateien, in denen Sie nach einem bestimmten Text suchen möchten, die Endung ".. haben .txt(und Sie möchten nicht die versteckten)."

Von man grepeinem System aus, auf dem grepsich die GNU-Implementierung befindet (wie es bei Linux-basierten Systemen üblich ist).

-o, --only-matching       show only the part of a line matching PATTERN
-i, --ignore-case         ignore case distinctions

Antwort2

Als Anfänger in Bash-Skripten suchte ich genau danach und schrieb basierend auf der oben akzeptierten Antwort das folgende Nautilus-Skript, das ich "Text im Verzeichnis suchen...". Da dies für mich von Zeit zu Zeit nützlich sein wird, dachte ich, dass es auch für andere nützlich sein könnte.

#!/bin/bash
# Nautilus Script to search text in selected folder
# Determine the path
if [ -e -n $1 ]; then
    obj="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
else
    base="`echo $NAUTILUS_SCRIPT_CURRENT_URI | cut -d'/' -f3- | sed 's/%20/ /g'`"
    obj="$base/${1##*/}"
fi
# Determine the type and go
if [ -f "$obj" ]; then
    /usr/bin/canberra-gtk-play --id="dialog-error" &
    zenity --error --title="Search Directory" --text "Sorry, selected item is not a folder."
elif [ -d "$obj" ]; then
    cd "$obj"
# Get text to search
    SearchText=$(zenity --entry --title="Search Directory" --text="For Text:" --width=250)
    if [ -z "$SearchText" ]; then
        notify-send "Search Directory" "Nothing entered; exiting..." -i gtk-dialog-info -t 500 -u normal &
        exit
    else
        if [ -f "/tmp/Search-Directory-Results.txt" ]; then
            rm "/tmp/Search-Directory-Results.txt"
        fi
        grep_menu()
        {
        im="zenity --list --radiolist --title=\"Search Directory\" --text=\"Please select one of the search options below:\""
        im=$im" --column=\"☉\" --column \"Option\" --column \"Description\" "
        im=$im"TRUE \"case-sensitive\" \"Match only: Text\" "
        im=$im"FALSE \"case-insensitive\" \"Match: TEXT, text, Text...\" "
        }
        grep_option()
        {
        choice=`echo $im | sh -`
        if echo $choice | grep -iE "case-sensitive|case-insensitive" > /dev/null
        then
            if echo $choice | grep "case-sensitive" > /dev/null
            then
                grep -- "$SearchText" *.* > "/tmp/Search-Directory-Results.txt"
            fi
            if echo $choice | grep "case-insensitive" > /dev/null
            then
                grep -i -- "$SearchText" *.* > "/tmp/Search-Directory-Results.txt"
            fi
        fi
        }
        grep_menu
        grep_option
    fi
    zenity  --class=LIST --text-info \
            --editable \
            --title="Search Directory" \
            --filename="/tmp/Search-Directory-Results.txt"
fi
exit 0

verwandte Informationen