Grep:尋找文字檔案中單字的所有可能情況

Grep:尋找文字檔案中單字的所有可能情況

我有一個包含許多文字檔案的目錄。

在這些文件中,我對“abcdefghi”一詞感興趣。我需要列出這個詞的所有可能的情況,例如

  • abcdefghi
  • abcdefghI
  • abcDefghi
  • ABCDEFGHI

以及所有其他可能的組合。

可以使用greporegrep嗎?

我知道,我可以編寫一個帶有 grep 和逆 grep 組合的 shell 腳本,獨特並實現輸出,但我正在尋找便攜式解決方案。

答案1

使用 GNU grep,試試這個:

grep -io -- 'abcdefghi' *.txt

我假設您想要搜尋特定文字的所有文件都會以以下結尾.txt(並且您不想要隱藏的文件)。

GNU 的實作來自man grep一個系統grep(這在基於 Linux 的系統上是典型的)。

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

答案2

作為 Bash 腳本的初學者,我正在尋找這個,並且根據上面接受的答案,我編寫了以下 Nautilus 腳本,我將其命名為“在目錄中搜尋文字...「。由於這有時會對我有用,所以我認為它對其他人也可能有用。

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

相關內容