`ack` не показывает номера строк в одном файле

16

Я использую ack для поиска строки. Когда я запускаю его без аргумента файла, я получаю номера строк:

$> ack function
themes/README.txt
7:Drupal's sub-theme functionality to ensure easy maintenance and upgrades.

sites/default/default.services.yml
48:    # - The dump() function can be used in Twig templates to output information

...

Но когда я пытаюсь указать файл, я не получаю номера строк.

$> ack function themes/README.txt
Drupal's sub-theme functionality to ensure easy maintenance and upgrades.

Я сделал поиск в Google, но не нашел результатов. Как мне получить возможность показывать номера строк в результатах из одного файла?

user394
источник

Ответы:

21

Когда вы не предоставите файл, ackбудет искать все файлы в текущем каталоге и подкаталогах. Если файл содержит соответствующий шаблон, ackвыведите это имя файла, номер строки и строку, которая соответствует шаблону.

Это поведение не относится к одному файлу (см. Документацию ack , поиск по -Hварианту).

Поскольку, когда ackнет -nстроки опций grep, которая будет печатать строку, соответствующую ее относительному номеру, у вас есть два варианта решения этой проблемы.

Принудительная ackпечать имени файла с помощью -H:

ack -H pattern file

или передать /dev/nullкак второй файл:

ack pattern file /dev/null
cuonglm
источник
7

Вы можете попробовать с опцией --with-filename:

ack --with-filename 'function' themes/README.txt

Эта проблема возникла как ошибка, и проблема была перемещена сюда .

taliezin
источник
5

Там должен быть вариант для этого. Но если нет, вы можете обмануть себя, ackдумая, что есть два файла для поиска, передав /dev/nullв командной строке дополнительный текст:

ack function themes/README.txt /dev/null

Кстати, тот же трюк можно использовать для grep(1)отображения имени файла даже при поиске в одном файле:

grep function themes/README.txt /dev/null
lcd047
источник