Sheldon Mey
Как да търсим в текст, файл или директория с бързата версия на grep в конзолата
Представи си, че разполагаш с неизчерпаеми дигитални колекции от музика, видео, е-книги или документи за стокооборота на фирмата. Не е чудно, чe докато с досада търсиш къде забога си записал онова яко парче – ремикс на Sweet Dreams – вече е преминало желанието ти да слушаш каквото и да e.
Запази спокойствие и отвори една конзола. Има лесен и бърз начин да намериш това, което търсиш за секунди без големи драми. Командата се нарича fgrep и е производна на grep от Unix, както и побратима на egrep. Разликата между 3-те е основно в метода на търсене и скоростта на обработка – egrep (extended grep) може да търси регулярни изрази – например телефонни номера – сред камара текст, докато fgrep (fixed grep) търси фиксиран стринг, което я прави и доста по-бърза.
Примерен синтаксис, заедно с няколко полезни опции, за търсене на думата “permissions” в документите на директория /benchmark може да бъде [скрийншот]:
sheldon:~$ fgrep -i -r -n –color==auto “permissions” ~/benchmark/
-i (още –ignore-case) – указва на командата да игнорира горен и долен регистър, т.е. не прави разлика между главни и малки букви
-r (още –recursive) – търси рекурсивно в указаната директория, обхождайки всички файлове и поддиректории в нея; задължителна опция, ако не си сигурен къде точно се намира търсеният файл
-n (още –line-number) – добавя към изходния резултат номера на всеки ред, в който е намерено търесеното съответствие; особено полезно при търсене в програмен код с множество обемисти файлове
–collor==auto – оцветява намерената фраза, за да е по-ясно различима сред останалия текст; полезно, когато към командата се използват опции за извеждане на повече редове от файла.
Макар горният пример да е по-подходящ за търсене в текстови файлове, нищо не пречи с fgrep да се търсят и конкретни музикални или видео парчета (т.нар. binary files) по име на файла. Например ето как можеш да намериш въпросният ремикс на Sweet Dreams:
sheldon:~$ fgrep -i -r -n –color==auto “sweet dreams” ~/Music/
Binary file /home/sheldon/Music/OST/Sucker Punch OST/Emily Browning – Sweet Dreams.flac
Дори да не уточниш в каква директория търсиш (в случая ~/Music/) fgrep ще търси във всички файлове и директории спрямо текущата, т.е. тази в която се намираш в момента (по подразбиране /home/username/). Това, разбира се означава по-бавно търсене, особено при системи с по-разклонена структура на директориите.
Специално в горния пример вместо fgrep може да се ползва по-удачната команда find, но за нея друг път. Успех.
С този втори пост от серията “Linux – ами че то е много лесно”* стартира една върволица от (да се надяваме) полезни съвети кое къде е и как се прави в Линукс. И за да е по-непринудена атмосферата, в нея ще си говорим предимно на “ти”.
Въпрос: Обикновенно командите в Linux разполагат с 2 популярни метода за получаване на повече информация относно опциите и синтаксиса им. Единият е {команда} –help. Какъв е другият?
*Препратка към невероятната книга на Антони Коларов “ОТО и гравитационната същност на Вселената”