Кращий спосіб пошуку рядка у файлі?


0

Я намагаюся знайти певний рядок тексту у файлі десь на жорсткому диску. Найкраще, що я придумав, це:

find -type f / | xargs cat | grep "string to find"

Але це просто підказує мені, чи існує струна десь чи ні.

Як я можу знати, у якому файлі я його знайшов?

Чи є кращий спосіб?

Відповіді:


4
find / -type f -exec grep "string" {} +

Це здійснить нечутливий до випадків пошук, який буде повільнішим, але гнучкішим:

find / -type f -exec grep -i "string" {} +

Ви можете отримати багато результатів, щоб ви могли передати їх менше, а потім використовувати fта bпереходити по вперед та назад по сторінці через вихід:

find / -type f -exec grep -i "string" {} + | less

Якщо ви знаєте, що шукаєте *.txtфайли, можете вдосконалити їх ще більше:

find / -type f -name "*.txt" -exec grep -i "string" {} + | less

5

Це повинно зробити трюк і набагато простіше:

grep -R "some string" /

додавання -n покаже вам потрібні номери рядків:

grep -Rn "some string" /

4

Навіщо взагалі використовувати «кішку»? Мені завжди дивно, як люди без жодної причини користуються «котом». Просто зробіть:

find -type f / | xargs grep "string to find"

Звичайно, пошук кожного файлу на всьому диску буде досить повільним. Вам, мабуть, краще скористатися якоюсь програмою індексації, якщо вам доведеться часто шукати подібний пошук. Наприклад, Бігль - досить розгалужена пошукова система, вона існує вже деякий час. Інші варіанти - Strigi KDE або Пошук на робочому столі Google

Принаймні, вам слід скористатись "locate" замість "find", вона індексує лише імена файлів, а не їх вміст, але це все одно прискорить роботу. Крім того, ви повинні фільтрувати на основі типу файлу, перш ніж використовувати grep. Наприклад, за допомогою grep-файлу у форматі avi розміром 100 МБ або щось таке - це лише марна трата часу.



2

Як я можу знати, у якому файлі я його знайшов?

Для друку відповідного файлу потрібно скористатися параметром " -H" з " grep".


Також,

  • Було б також хорошою ідеєю використовувати трохи кращу здогадку, ніж корінь (' /').
  • JohnСхема -execперемикання |оператора " " допоможе, коли у вас багато файлів, що шукаються

3
+1 - Вам майже ніколи не потрібно починати пошук /. Також варто сказати, що якщо ви запускаєте пошук, починаючи з /постійного користувача, вам доведеться отримати повідомлення про помилки через проблеми з дозволами.
Телемах

2
grep -H в цьому випадку не працюватиме через надмірне використання "кота". це було б просто надрукувати 'stdin'. Тепер, якщо він не використовував 'cat', то за замовчуванням налаштування grep - це надрукувати, у якому файлі він відповідає, тому йому не знадобиться додатковий прапор.
давр

1

Так, греп із прапором -r буде шукати рекурсивно. Спробуйте таку команду, як:

grep -ri 'hello' .

Який буде шукати в поточному каталозі, а також у кожному файлі та каталозі всередині нього фразу "привіт". Прапор -i робить його незалежним від регістру, тому він також знайде "Hello", "HELLO" тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.