Як шукати певний текст у конкретних типах файлів? [дублікат]


13

Можливий дублікат:
Як я можу отримати файл у вихідних файлах за деякий текст?

Яка команда пошуку конкретного тексту в конкретних типах файлів, рекурсивно, під поточним каталогом?


Що ви хочете повернути? рядок, на якому знаходиться текст? ім'я файлу, в якому знаходиться текст?
MaQleod

@MaQleod: Це було б добре (ім'я файлу + кількість ліній + фрагмент), якщо це можливо.
Філіпп

@slhck: ack-grep не встановлено; У мене немає дозволів його встановити.
Філіпп

1
Вам не знадобиться ack-grep, ви можете використовувати приклади у запитанні як початок (як я вже сказав), тобто find | xargs | grepрядки. Для конкретного виводу man grepзавжди корисно читати.
slhck

@slhck: Дякую, так я і зробив grep -r --include=*.<type> "<string>" ., що спрацювало. На жаль, сторінка чоловіка не дуже проста в згадці про крапку.
Філіпп

Відповіді:


11
find . -type f -name '*.extension' | xargs grep "string"

Ця команда виконує пошук у локальному каталозі (.) Для будь-яких файлів з іменами, що відповідають шаблону * .extension, потім запускає grep для "рядка" за результатами знаходження . Зауважимо, що знахідка за своєю суттю рекурсивна. Поки ви можете розмежувати потрібні файли від файлів, які ви не базуєтесь на імені, це повинно працювати для вас.


2
У результаті розриву файлів, що містять пробіли, ви повинні використовувати print0опцію, щоб бути безпечнішою.
slhck

Тільки find -print0не допоможе, також використовуйте xargs -0:find . -type f -name "*.ext" -print0 | xargs -0 grep "string"
BurninLeo

0

Щоб перелічити ім'я файлу, номер рядка у вказаному файлі та рядку, з'явиться текст:

for x in *.xxx; do [ -r $x ] | cat $x | grep -n TEXT | xargs printf "$x:%s\n";done

Він запускається лише в поточному каталозі, але він буде добре відформатувати його.

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