我有一个包含许多文本文件的目录。
在这些文件中,我对“abcdefghi”一词感兴趣。我需要列出这个词的所有可能的情况,例如
- abcdefghi
- abcdefghI
- abcDefghi
- ABCDEFGHI
以及所有其他可能的组合。
可以使用grep
oregrep
吗?
我知道,我可以编写一个带有 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