많은 텍스트 파일이 포함된 디렉터리가 있습니다.
이 파일에서 나는 "abcdefghi"라는 단어에 관심이 있습니다. 이 단어의 가능한 모든 상황을 나열해야 합니다.
- abcdefghi
- abcdefghI
- abcDefghi
- ABCDEFGHI
그리고 다른 모든 가능한 조합.
grep
또는 을 사용할 수 있나요 egrep
?
나는 grep과 inverse grep을 조합하여 고유한 쉘 스크립트를 작성하고 출력을 얻을 수 있다는 것을 알고 있지만 이식 가능한 솔루션을 찾고 있습니다.
답변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