Найти 10 "main ()" в первых 10 строках в обычных файлах

Пытается написать комманд, который печатает эти параметры, которые соответствуют обычным файлам, содержащим текст «main ()» в любой из его первых 10 строк.
Что я должен сканировать все файлы и искать 10 первых строк?

3 Solutions collect form web for “Найти 10 "main ()" в первых 10 строках в обычных файлах”

Вы можете использовать GNU grep с его регулярными выражениями Perl. Это приведет к выводу строки, содержащей строку main () в любом месте в первых 10 строках входного файла.

Параметр -z позволяет отделить файл и обработать его как одну большую строку (если она не содержит символов NUL), на которой будет работать grep. -P позволяет использовать режим Perl для grep, -o показывает вам соответствующую часть, -h скроет имя файла, отображаемое рядом с соответствующей строкой, и -l отобразит только имя файла.

Если вы хотите как имя файла, так и соответствующую строку:

 grep -HPoz '\A(.*\n){0,9}\K[^\n]*main\(\)[^\n]*\n' file.txt 

только совпадающая строка:

 grep -hPoz '\A(.*\n){0,9}\K[^\n]*main\(\)[^\n]*\n' file.txt 

( -h необходимо только при наличии нескольких файлов)

только имя файла:

 grep -Pozl '\A(.*\n){0,9}\K[^\n]*main\(\)[^\n]*\n' file.txt 

Чтобы запустить текущий каталог, но не рекурсивный: (ofc, параметры grep должны поставляться в соответствии с требованиями, как показано выше)

 find . ! -name . -prune -type f \ -exec grep -HPoz '\A(.*\n){0,9}\K[^\n]*main\(\)[^\n]*\n' {} + 

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

 for file in *; do head -n 10 "$file" | grep -F 'main()' done 

Это напечатает соответствующие строки. Чтобы напечатать как соответствующую строку, так и имя файла, используйте:

 for file in *; do q=$(head -n 10 "$file" | grep -F 'main()') [ -z "$q" ] || printf '%s : %s\n' "$file" "$q" done 

И для печати только имен файлов, а не соответствующей строки:

 for file in *; do head -n 10 "$file" | grep -qF 'main()' && printf '%s\n' "$file" done 

Я бы использовал awk :

 awk 'FNR <= 10 && index($0, "main()") {print FILENAME ":", $0}' ./*.c 
  • Как grep файл в точке монтирования smb без использования mount или fstab?
  • Как использовать netstat для отображения только протокола, порта и статуса?
  • grep awk или sed CSV Row, содержащий определенную часть веб-адреса
  • grep для нескольких строк в файлах, а затем список файлов в порядке размера
  • Поиск строки в файлах
  • Греп странное исключение пустых строк из вывода
  • Как выбрать второй столбец после найденного шаблона, шаблоны - «100»,
  • как экспортировать все номера, которые уникальны в нескольких текстовых файлах в другой файл?
  • Исключить скрытые подкаталоги из grep -r
  • Шаблон Грепа в ksh
  • Создание предложений для ошибок из словаря поиска
  • Linux и Unix - лучшая ОС в мире.