Ви використовуєте vim. У вас є інструмент для цього вбудований.
За прогнозами, вже є сім відповідей, які вже говорять про використання grep. Але я, здається, єдина людина на даний момент, яка помітила з вашого питання, яке ви використовуєте vim. Таким чином, хоча ви можете використовувати grepзсередини vim, ви також можете використовувати vimвбудований інструмент. Це викликається за допомогою :vimgrepкоманди.
Для пошуку "всіх вихідних файлів C у поточному каталозі для виклику функції toUpperCase()" слід ввести vimкоманду
:vimgrep "\<toUpperCase\_s*(" *.c
Отриманий список збігів автоматично завантажується у список швидких виправлень, доступний будь-яким із них (див. Он-лайн довідку про тонку різницю)
:copen
:cwin
Знайти визначення функції , а не дзвінки до неї, ctags- це інструмент, як згадується у Gillesвідповіді у відповіді , разом із командами :tjumpабо :tselect.
Навіщо використовувати :vimgrep?
Онлайн-довідка ( :help grep) наводить кілька причин, через які я тут не буду папугувати. Крім того, порівняйте дію :vimgrepз dietbuddhaвідповіддю відповіді . dietbuddhaкомандний рядок розпилює індивідуальний grepпроцес для кожного окремого вихідного файлу C. Він навіть не потребує xargsзменшення накладних витрат. І вам все одно доведеться якось проаналізувати вихід, щоб викликати текстовий редактор у відповідних вихідних файлах після його закінчення. :vimgrepвзагалі не розщеплює кілька додаткових процесів, а використання результату - це сама простота. Виділення однієї з записів у списку швидких виправлень автоматично позиціонує курсор у відповідний рядок відповідного вихідного файлу.
Насправді це робить саме те, що ви написали, ви робили б вручну, за винятком автоматично. Це автоматизований спосіб виконання тих самих дій редактора тексту. Він завантажує файл як би завантажений вручну, шукає в ньому регулярний вираз (використовуючи той самий синтаксис регулярного вираження, який ви вже використовуєте в інших місцях vim), записує місця, де виникають збіги, а потім вивантажує файл.