ฉันต้องการค้นหาไฟล์ข้อความในฮาร์ดดิสก์ซึ่งมีคำเฉพาะ
ก่อนหน้า Ubuntu 12.4 ฉันเคยเริ่มแอพพลิเคชั่นประฉันคิดว่ามันถูกเรียกว่า "ค้นหาไฟล์ ... " ซึ่งมีไอคอนเป็นแว่นขยายฉันไม่สามารถหาแอพพลิเคชั่นที่เรียบง่ายได้อีก
ฉันต้องการค้นหาไฟล์ข้อความในฮาร์ดดิสก์ซึ่งมีคำเฉพาะ
ก่อนหน้า Ubuntu 12.4 ฉันเคยเริ่มแอพพลิเคชั่นประฉันคิดว่ามันถูกเรียกว่า "ค้นหาไฟล์ ... " ซึ่งมีไอคอนเป็นแว่นขยายฉันไม่สามารถหาแอพพลิเคชั่นที่เรียบง่ายได้อีก
คำตอบ:
คุณสามารถใช้grep
คำสั่งจากเทอร์มินัล:
grep -r word *
คำสั่งนี้จะค้นหาคำว่า "word" ทั้งหมดในไฟล์ทั้งหมดภายใต้ไดเรกทอรีปัจจุบัน (หรือหน่วยย่อย)
--color=auto
แฟล็กสามารถแก้ปัญหานั้นได้
ติดตั้ง gnome-search-tool
sudo apt-get install gnome-search-tool
เปิดSearch for files
เลือกSelect More Options
และ
which gnome-search-tool
= /usr/bin/gnome-search-tool
... แต่เมื่อฉันเปิดตัวเลือกการค้นหาเป็นคำพังเพย (ไปค้นหาไฟล์ ... ) ไม่มีตัวเลือกสำหรับ "เลือกตัวเลือกเพิ่มเติม"
gnome-search-tool
และฉันแน่ใจว่าคุณจะเห็นมัน
ต่อไปนี้เป็นภาพรวมของวิธีการต่าง ๆ ที่สามารถใช้ในการค้นหาไฟล์สำหรับสตริงข้อความที่ต้องการโดยมีตัวเลือกไม่กี่ตัวที่ถูกเพิ่มเข้ามาเพื่อทำงานกับไฟล์ข้อความเท่านั้นและไม่สนใจไฟล์ไบนารี / แอปพลิเคชัน
อย่างไรก็ตามสิ่งหนึ่งที่ควรทราบคือการค้นหาคำอาจมีความซับซ้อนเล็กน้อยเนื่องจากเครื่องมือจับคู่บรรทัดส่วนใหญ่จะพยายามค้นหาคำที่ใดก็ได้ในบรรทัด หากเรากำลังพูดถึงคำว่าสายอักขระที่อาจปรากฏในจุดเริ่มต้นหรือจุดสิ้นสุดของบรรทัดหรืออยู่คนเดียวในบรรทัดหรือล้อมรอบด้วยช่องว่างและ / หรือเครื่องหมายวรรคตอน - นั่นคือเมื่อเราต้องการการแสดงออกปกติและโดยเฉพาะอย่างยิ่งที่มา จาก Perl ตัวอย่างเช่นที่นี่เราสามารถใช้-P
ในgrep
การใช้ประโยชน์จากการแสดงออกปกติ Perl เพื่อล้อมรอบมัน
$ printf "A-well-a don't you know about the bird?\nWell, everybody knows that the bird is a word" | grep -noP '\bbird\b'
1:bird
2:bird
$ grep -rIH 'word'
-r
สำหรับการค้นหาแบบเรียกซ้ำลงจากไดเรกทอรีปัจจุบัน-I
เพื่อละเว้นไฟล์ไบนารี-H
ไปที่ชื่อไฟล์ผลลัพธ์ที่พบการแข่งขันเหมาะสำหรับการค้นหาเท่านั้น
$ find -type f -exec grep -IH 'word' {} \;
find
ส่วนการค้นหาแบบเรียกซ้ำ-I
ตัวเลือกคือการละเว้นไฟล์ไบนารี-H
ไปยังชื่อไฟล์เอาต์พุตที่พบบรรทัดวิธีการที่ดีสำหรับการรวมกับคำสั่งอื่นภายใน subshell เช่น:
$ find -type f -exec sh -c 'grep -IHq "word" "$1" && echo "Found in $1"' sh {} \;
#!/usr/bin/env perl
use File::Find;
use strict;
use warnings;
sub find_word{
return unless -f;
if (open(my $fh, $File::Find::name)){
while(my $line = <$fh>){
if ($line =~ /\bword\b/){
printf "%s\n", $File::Find::name;
close($fh);
return;
}
}
}
}
# this assumes we're going down from current working directory
find({ wanted => \&find_word, no_chdir => 1 },".")
นี่คือ "วิธีทุบตี" ไม่เหมาะอาจไม่มีเหตุผลที่ดีที่จะใช้สิ่งนี้เมื่อคุณมีgrep
หรือperl
ติดตั้ง
#!/usr/bin/env bash
shopt -s globstar
#set -x
grep_line(){
# note that this is simple pattern matching
# If we wanted to search for whole words, we could use
# word|word\ |\ word|\ word\ )
# although when we consider punctuation characters as well - it gets more
# complex
case "$1" in
*word*) printf "%s\n" "$2";;
esac
}
readlines(){
# line count variable can be used to output on which line match occured
#line_count=1
while IFS= read -r line;
do
grep_line "$line" "$filename"
#line_count=$(($line_count+1))
done < "$1"
}
is_text_file(){
# alternatively, mimetype command could be used
# with *\ text\/* as pattern in case statement
case "$(file -b --mime-type "$1")" in
text\/*) return 0;;
*) return 1;;
esac
}
main(){
for filename in ./**/*
do
if [ -f "$filename" ] && is_text_file "$filename"
then
readlines "$filename"
fi
done
}
main "$@"
คำถามค่อนข้างเก่า ... ต่อไป ... ปัจจุบัน (2016) มีแอป gnome ที่เรียกว่าtracker
(คุณสามารถค้นหาได้ในที่เก็บ Ubuntu) ที่สามารถติดตั้งเพื่อค้นหาข้อความภายในไฟล์ (ลอง odt-ods-odp-pdf) . แพคเกจมาพร้อมกับ 4 แพ็คเกจอื่น ๆ ที่จะติดตั้ง (tracker-extract, tracker-gui, tracker-miner-fs, tracker-utils) Namastè :)
ใช่ฉันรู้ว่าคุณกำลังมองหาแอปพลิเคชั่น Gui และนี่คือโพสต์เก่า แต่อาจช่วยคนได้ ฉันพบ ack-grep util ตอนแรกติดตั้งผ่านsudo apt-get install ack-grep
แล้วเรียกใช้คำสั่งack-grep what_you_looking_for
ในไดเรกทอรีที่คุณต้องการค้นหา นี่จะแสดงไฟล์ทั้งหมดที่เป็นข้อความของคุณและแสดงตัวอย่างจากไฟล์นี้ และนี่เป็นสิ่งสำคัญสำหรับฉัน
ได้ง่ายและเร็วขึ้นคือ sudo apt-get install silversearcher-ag
"เงินค้นหา" ลองดูที่https://github.com/ggreer/the_silver_searcherเพื่อดูเหตุผลว่าทำไมถึงดีกว่า ack *
grep -r word .
ใช้ได้