Я использую grep recursive для поиска файлов по строке, и все соответствующие файлы и строки, содержащие эту строку, печатаются на терминале. Но возможно ли получить номера строк этих строк тоже?
пример: в настоящее время я получаю /var/www/file.php: $options = "this.target"
, но я пытаюсь получить /var/www/file.php: 1142 $options = "this.target";
, ну, где 1142
будет номер строки, содержащей эту строку.
Синтаксис, который я использую для grep рекурсивно sudo grep -r 'pattern' '/var/www/file.php'
Еще один вопрос заключается в том, как мы получаем результаты, не равные шаблону. Как и все файлы, но не те, которые имеют определенную строку?
Ответы:
источник
-r
если вы указываете несколько файлов. Вам нужно только-r
если вы указали каталоги.Номера строк печатаются с
grep -n
:Чтобы получить только номер строки (без соответствующей строки), можно использовать
cut
:Линии, не содержащие шаблон, печатаются с
grep -v
:источник
grep -n pattern file.txt | cut -d : -f 1 | tail -1
(вы можете сохранить это в переменной и использовать его, например, для хвостового файла из него)grep -n pattern file.txt | sed 's/^[0-9][0-9]*://'
Если вы хотите только номер строки, сделайте это:
Пример:
источник
awk -F: '{print $1}'
также работает и вам не нужно-r
вgrep
при использовании на файлы (только каталоги могут быть найдены рекурсивно)Поиск шаблона и показать 20 строк после и до шаблона
источник
-C20
это более короткая версия, если это то, что нужноgrep -nr каталог "строка поиска"
Это дает вам строку с номером строки.
источник
Чтобы отобразить результаты с номерами строк, вы можете попробовать это
Результат должен быть примерно таким:
источник