Ack не показывает номер строки при поиске в одном файле - PullRequest
0 голосов
/ 01 октября 2018

пример) Когда я ищу exec в файле proc.c,

$ ack allocproc proc.c

allocproc(void)
p = allocproc();
if((np = allocproc()) == 0){
// Return to "caller", actually trapret (see allocproc).

, но когда я ищу во всем каталоге,

$ ack allocproc

---- blah blah blah ----

proc.c
36:allocproc(void)
84:  p = allocproc();
139:  if((np = allocproc()) == 0){
357:  // Return to "caller", actually trapret (see allocproc).

... Я хочу показатьстрок при поиске строки в одном файле ...

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Флаг -H в ack заставит ack поместить заголовок файла и номер строки в каждый файл.Это поведение копируется непосредственно из GNU grep.

Вы указываете на возможность создания псевдонима оболочки.Другой вариант - поместить -H в файл ackrc.ack поддерживает три разных места для поиска ackrc.Это системный файл в / etc / ackrc, личный для вас файл ~ / .ackrc, и вы также можете иметь файл для конкретного проекта, обычно в корне проекта.

Для получения дополнительной информации о файлах ackrc обратитесь к руководству по ack (ack --man - один из способов его просмотра) и найдите раздел «ФАЙЛ .ackrc» и «СЕМАНТИКА МЕСТНОГО РАЗМЕЩЕНИЯ ACKRC».

Один недостатокпомещение -H в ваш .ackrc означает, что оно всегда будет в силе, независимо от того, как вы вызываете ack, поэтому, если, например, вы передаете выходные данные из одного процесса через ack, ack все равно будет отображать заголовок и номера строк.

Еще один способ справиться с этим: просто добавьте параметр -H, когда вам это нужно.

0 голосов
/ 12 ноября 2018

Я обнаружил, что в grep и ack , если они ведут себя по-разному с одним файлом, чем с несколькими файлами, вы можете принудительно настроить поведение нескольких файлов с помощьювключая /dev/null в качестве второго файла для поиска.

Конечно, использование переключателя -H намного чище (и имеет преимущество в том, что он указан в документации, так что любопытные сопровождающие могут видеть точнуюцель его использования), но если вы в крайнем случае и не имеете доступной документации (или если вы используете какую-то другую программу, которая ведет себя по-разному по сравнению с одной или несколькими файлами), то использование /dev/null будетвероятно, сработает.

Я не рекомендую использовать эту технику /dev/null в командах, вызываемых в сценариях - в таких случаях предпочтительным является ключ -H, если по какой-то причине -H не является буквальнонедоступен для вас.

0 голосов
/ 01 октября 2018

Может быть, добавить строку в .bashrc alias ackl='ack -H'

и использовать команду ackl по умолчанию ... это решит временно.

...