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

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

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

Desses arquivos, estou interessado na palavra "abcdefghi". Preciso listar todos os casos possíveis desta palavra, como

  • abcdefghi
  • abcdefghI
  • abcDefghi
  • ABCDEFGHI

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

É possível com grepou egrep?

Eu sei, posso escrever um script de shell com combos de grep e grep inverso, único e obter resultados, mas estou procurando uma solução portátil.

Responder1

Com GNU grep, tente isto:

grep -io -- 'abcdefghi' *.txt

Presumi que todos os arquivos com os quais você deseja pesquisar um determinado texto terminariam .txt(e você não deseja os ocultos).

A partir man grepde um sistema onde grepestá 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

Responder2

Como iniciante em scripts Bash, eu estava procurando exatamente isso e, com base na resposta aceita acima, escrevi o seguinte script Nautilus, que chamei de "Pesquisar texto no diretório...". Como isso será útil para mim de vez em quando, pensei que também poderia ser útil para outras pessoas.

#!/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

informação relacionada