Grep: Encontre todos os casos possíveis de uma palavra no arquivo de texto

1

Eu tenho um diretório com muitos arquivos de texto.

Fora desses arquivos, estou interessado em uma palavra "abcdefghi". Preciso listar todos os possíveis casos dessa palavra, como

  • abcdefghi
  • abcdefghI
  • abcDefghi
  • ABCDEFGHI

e todas as outras combinações possíveis.

É possível com grep ou egrep ?

Eu sei, eu posso escrever um shell script com combos de grep e grep inverso, único e alcançar as saídas, mas estou procurando uma solução portátil.

    
por user1263746 10.05.2014 / 16:28

2 respostas

6

Com o GNU grep , tente isto:

grep -io -- 'abcdefghi' *.txt

Eu assumi que todos os arquivos que você deseja procurar por um texto específico terminariam com .txt (e você não quer os ocultos).

De man grep em um sistema onde grep é a implementação do GNU (como é típico em sistemas baseados em Linux).

-o, --only-matching       show only the part of a line matching PATTERN
-i, --ignore-case         ignore case distinctions
    
por 10.05.2014 / 16:32
1

Como um iniciante no script Bash, eu estava procurando exatamente isso, e com base na resposta aceita acima, eu escrevi o seguinte script Nautilus, que eu chamei de " Search Text in Directory ... " . Como isso será útil para mim de tempos em tempos, eu pensei que também poderia ser útil para os outros.

#!/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
    
por 21.12.2016 / 00:16

Tags