Показать имя файла и номер строки в выводе grep
Я пытаюсь найти в моей директории rails, используя grep. Я ищу конкретное слово и хочу grep распечатать имя файла и номер строки.
Есть ли флаг grep, который сделает это для меня? Я пытался использовать комбинацию -n
и -l
но это либо распечатка имен файлов без номеров, либо просто вывод большого количества текста на терминал, который не может быть легко прочитан.
например:
grep -ln "search" *
Мне нужно передать это в awk?
Ответы
Ответ 1
Я думаю, что -l
слишком ограничительный, поскольку он подавляет вывод -n
. Я бы предложил -H
(--with-filename
): напечатать имя файла для каждого соответствия.
grep -Hn "search" *
Если это дает слишком большой результат, попробуйте -o
напечатать только ту часть, которая соответствует.
grep -nHo "search" *
Ответ 2
grep -rin searchstring * | cut -d: -f1-2
Это будет searchstring
поиск рекурсивно (для строки searchstring
в этом примере), игнорирование регистра и отображение номеров строк. Вывод этого grep будет выглядеть примерно так:
/path/to/result/file.name:100: Line in file where 'searchstring' is found.
Затем мы передаем этот результат команде cut, используя двоеточие :
качестве разделителя полей и отображая поля с 1 по 2.
Когда мне не нужны номера строк, я часто использую -f1
(только имя файла и путь), а затем направляю вывод в uniq
, так что я вижу каждое имя файла только один раз:
grep -ir searchstring * | cut -d: -f1 | uniq
Ответ 3
Мне нравится использовать:
grep -niro 'searchstring' <path>
Но это только потому, что я всегда забываю другие способы, и по какой-то причине я не могу забыть Robert de grep -
niro:)