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


8

Наразі я використовую дві команди, я впевнений, що повинен бути кращий спосіб ...

wim@wim-acer:~/ffmpeg$ find . -name "*.h" -print0 | xargs -0 grep -i invalid\ preset
wim@wim-acer:~/ffmpeg$ find . -name "*.c" -print0 | xargs -0 grep -i invalid\ preset

1
робить -name '*.[ch]'роботу?
Глен Джекман

Відповіді:


10

ack (або, на Debian / Ubuntu, ack-grep) буде ігнорувати не вихідні файли, такі як контроль версій або бінарні файли. Дуже корисний.

шукати лише файли .c та .h, як зазначено вище:

ack-grep -i --cc "invalid preset"

--cc(Чим більше форма --type cc) дивиться тільки на .c .h і .xs файлів. Повний список файлів можна переглянути за допомогою ack-grep --help type. Більшу частину часу вам особливо не знадобляться --type, оскільки це, як правило, лише файли для пошуку, а потім файли, які ви не побачите за замовчуванням, як бінарні файли, резервні копії та файли контролю версій.


5

Сама grepпрограма може рекурсивно здійснювати пошук, а також приймає можливість пошуку лише певних файлів. Далі еквівалентно вашим двом findкомандам.

grep -Ri --include=*.[ch] invalid\ preset .

Це спрацювало для мене, коли я позбувся дужок
Майк

1

Команда find може сама викликати grep.

find . \( -name "*.c" -o -name "*.h" \) -exec grep -i "invalid preset" {} \; -print

та їх варіації.


Змінив це на очевидну варіацію. ;-)
Кіт

0

Я можу додати щось подібне до вашого ~/.bashrc

alias cppgrep='grep -Ri "--include=*.[hc]" "--include=*.cpp" "--include=*.hpp"'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.